Processingについての質問です。
javaのAPIを用いて、例えば画面をクリックしたときに、ポップアップでウインドウが出て「クリックされました」というような表示がされるようにしたいとき、どのように、コーディングすればよろしいでしょうか。
しばらく調べてもわかりませんでした、
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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総合スコア18394
0
processing
mouseX,mouseYでマウスの座標を取ることができます
また、
void mousePressed(){
...
}
を使うことでマウスがクリックされた際のプログラムを作ることができます
クリックされました、との表示についてはどのような表示をしようとしているかでまた変わってきます
投稿2017/06/01 06:22
総合スコア42
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。