質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

2回答

3775閲覧

java外部ライブラリを使ったポップアップのやり方(Processing)

58182

総合スコア7

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2017/05/29 01:49

Processingについての質問です。

javaのAPIを用いて、例えば画面をクリックしたときに、ポップアップでウインドウが出て「クリックされました」というような表示がされるようにしたいとき、どのように、コーディングすればよろしいでしょうか。

しばらく調べてもわかりませんでした、

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ポップアップでウインドウが出て「クリックされました」というような表示

マウスが「いつ」「どの座標で」押されたかはclosed_namedさんの回答の通りですが、「ポップアップを出す」という点について回答します。

  • Processingの機能のみを使って出す

textメソッドを使ってウィンドウ上の任意の場所へテキストを表示するなら簡単なのですが、「ポップアップ」的なものにするなら、textメソッドを使って書いた内容を元に戻す配慮などが必要で若干面倒なプログラミングが必要になります。マウスを押した場所に表示するのではなく、どこか当たり障りのない固定的な座標へテキストを表示し、それを消す際にはその領域を単純にrectを用いて背景色で塗りつぶすなら簡単です。

  • swingのPopupクラスを使う

いわゆる本物のポップアップウィンドウにするなら、swingのPopupクラスを使うことになりそうですが、Processing上でswing/awtの機能を使うことについて公式にはサポートされていない気がします。つまりそのようなことをしようとするなら「自己責任で」しなくてはならずProcessingのバージョンアップなどにより「いつか動かなくなる」可能性があるかも知れません。

それはともかく試しに挑戦してみたのでそのコードを挙げてみます。

processing

1import processing.awt.PSurfaceAWT; 2import java.awt.*; 3import javax.swing.*; 4import java.awt.event.*; 5 6Popup popup; 7 8void setup() { 9 size(200, 200); 10} 11 12void draw() { 13} 14 15void mousePressed() { 16 showPopup("マウスが押されています", mouseX, mouseY); 17} 18 19void mouseReleased() { 20 hidePopup(); 21} 22 23// 24// Processingのメイン画面の実体(awt.Componentクラス)を求める 25// 26PSurfaceAWT.SmoothCanvas getCanvas(PSurface surf) { 27 return (PSurfaceAWT.SmoothCanvas)surf.getNative(); 28} 29 30// 31// 指定位置に指定メッセージのポップアップを表示する。 32// 33void showPopup(final String message, final int x, final int y){ 34 // invokeLaterが必要かどうかはっきりしませんが、 35 // Processingはswingの標準UIスレッド(EDT)とは 36 // 違うスレッドで動作しているため一応こうしています。 37 SwingUtilities.invokeLater(new Runnable() { 38 public void run() { 39 if (popup != null) 40 hidePopupOnEDT(); 41 42 JLabel label = new JLabel(message); 43 44 Component canvas = getCanvas(getSurface()); 45 Point canvasLoc = getCanvas(getSurface()).getLocationOnScreen(); 46 int mx = canvasLoc.x; 47 int my = canvasLoc.y; 48 49 PopupFactory factory = PopupFactory.getSharedInstance(); 50 popup = factory.getPopup(canvas, label, mx + x, my + y - 16); 51 popup.show(); 52 } 53 }); 54} 55 56// 57// 表示中のポップアップがあれば消す。 58// 59void hidePopup() { 60 SwingUtilities.invokeLater(new Runnable() { 61 public void run() { 62 hidePopupOnEDT(); 63 } 64 }); 65} 66 67// 68// このメソッドはProcessingから直接呼ばないでください 69// 70void hidePopupOnEDT() { 71 if (popup == null) 72 return; 73 74 popup.hide(); 75 popup = null; 76}

投稿2017/06/02 02:49

編集2017/06/02 05:55
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

processing
mouseX,mouseYでマウスの座標を取ることができます
また、
void mousePressed(){
...
}

を使うことでマウスがクリックされた際のプログラムを作ることができます

クリックされました、との表示についてはどのような表示をしようとしているかでまた変わってきます

投稿2017/06/01 06:22

closed_named

総合スコア42

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問