実現したいこと
"MouseListenerイベントを取得して、クリック時に描画する。"
ー詳細ー
ImageJ用のプラグインを作成しています。
1.mainパネルの生成。
2.”open&run”をクリックするとダイアログが表示される。
3.画像サイズが等しいファイルを2つ選択。
4.新しいwindowを生成する。
4.のWindow上では、
this.imp.getProcessor().copyBits(aviMovie.ip, 1, 1, Blitter.COPY);
で画像が描画されています。
このとき、addMouseListener(this);を実行すると
Panelの描画されている部分のみClickEventが反応しません。
おそらく、描画されているため、addMotionListener()の指定が適切でない(thisではない)からと考えています。
ー質問内容ー
画像を描画したときのaddMouseListenerはどうすればよいでしょうか。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
java(ImageJのプラグインを使用)
1import... 2 3public class split2_2 implements PlugIn{ 4 5 class AVIMovie{... 6 class PreviewWindow extends ImageWindow implements ActionListener,ItemListener, 7 WindowListener, ChangeListener, MouseListener{ 8・・・ 9 10 void addPanel() { 11 /* 12 (1)指定したレイアウトに設定する. 13 (2)水平方向のスライダーを生成 14 (3)ChangeEventを適用させる 15 (4)panelに追加する 16 */ 17 Panel panelSlider = new Panel(); 18 19 panelSlider.setLayout(new GridLayout(0, 1, 0, 0));//(1) 20 slider = new JSlider(JSlider.HORIZONTAL); //(2) 21 slider.setPreferredSize(new Dimension(400, 20)); 22 23 slider.addChangeListener(this); //(3) 24 panelSlider.add(slider); 25 add(panelSlider); //(4) 26 27 Panel panel = new Panel(); 28 panel.setLayout(new GridLayout(0, 5, 10, 10)); 29 btnFirst = new Button(" << "); 30 btnFirst.addActionListener(this); 31 panel.add(btnFirst); 32 33 btnPrev = new Button(" < "); 34 btnPrev.addActionListener(this); 35 panel.add(btnPrev); 36 37 btnPlay = new Button(" Play "); 38 btnPlay.addActionListener(this); 39 panel.add(btnPlay); 40 41 btnNext = new Button(" > "); 42 btnNext.addActionListener(this); 43 panel.add(btnNext); 44 45 btnLast = new Button(" >> "); 46 btnLast.addActionListener(this); 47 panel.add(btnLast); 48 49 labelCurr = new JLabel ("Current Frame"); 50 panel.add(labelCurr); 51 52 txtCurrFrame = new TextField(); 53 txtCurrFrame.setText("1"); 54 txtCurrFrame.addActionListener(this); 55 panel.add(txtCurrFrame); 56 57 labelCurr = new JLabel ("Delay"); 58 panel.add(labelCurr); 59 60 txtDelay = new TextField(); 61 txtDelay.addActionListener(this); 62 panel.add(txtDelay); 63 64 empty = new JLabel (""); 65 panel.add(empty); 66 67 paintCheck = new Checkbox(" paint "); 68 paintCheck.addItemListener(this); 69 panel.add(paintCheck); 70 71 splitCursor = new Checkbox(" splitCursor "); 72 splitCursor.addItemListener(this); 73 panel.add(splitCursor); 74 75 **addMouseListener(this);** 76 77 78 add(panel); 79 pack(); 80 } 81・・・ 82 83 84 85 private void InitGUI() { 86 /* 87 (1)DelayのテキストBOXに10を設定 88 (2)最小値を上書きする 89 (3)最大値を上書きする 90 (4)スライダーをはじめに設定する 91 (5)フレームをコピーして,生成したキャンバスに上書きする 92 (6)(5)の左側 93 */ 94 try { 95 txtDelay.setText("10"); //(1) 96 slider.setMinimum(iStartFrame); //(2) 97 slider.setMaximum(iStopFrame); //(3) 98 slider.setValue(1); //(4) 99 100 this.imp.getProcessor().copyBits(aviMovie.ip, 1, 1, Blitter.COPY); //(5) 101 this.imp.getProcessor().copyBits(aviMovie.ip2, width + 2, 1, Blitter.COPY); //(6) 102 this.imp.updateAndDraw(); 103 104 UpdateTitle(); 105 } 106 catch (Exception e) { 107 String msg = e.getMessage(); 108 if (msg == null || msg.equals("")) {msg = "" + e;} 109 IJ.showMessage("ALEMBIC AVI Splitter", "InitGUI: " + msg); 110 } 111 bInitGUI = false; 112 } 113 114 ・・・ 115 @Override 116 public void mouseMoved(int x, int y) { 117 /* 118 ImageWindowのメソッドmouseMovidは座標を取得する 119 (1)右画面を初期化する 120 (2)カーソルを複製するか判定 121 (3)iconの画像を画面上に表示 122 (4)再生中にカーソルが移動したとき,再生を停止させる. 123 (5)画面をアップデート 124 */ 125 try{ 126 pointX = x; 127 pointY = y; 128 if(splitCursor.getState()) { //(2) 129 if(width-2 > pointX && height-2 > pointY) { 130 this.imp.getProcessor().copyBits(aviMovie.ip2, width + 2, 1, Blitter.COPY);//(1) 131 132 133 this.imp.getProcessor().copyBits(aviMovie.ipIcon, pointX + width + 2, pointY + 1, Blitter.COPY);//(3) 134 135 if(!bStop) {bStop = true;}//(4) 136 } 137 } 138 this.imp.updateAndDraw();//(5) 139 140 } 141 catch (Exception e) { 142 String msg = e.getMessage(); 143 if (msg == null || msg.equals("")) {msg = "" + e;} 144 IJ.showMessage("ALEMBIC AVI Splitter", "mouseMoved(): " + msg); 145 } 146 } 147 148 149 @Override 150 public void mouseClicked(MouseEvent e) { 151 IJ.log("a"); 152 /* 153 this.setVisible(true); 154 this.g = this.getGraphics(); 155 g.setColor(Color.RED); 156 g.fillOval(pointX,pointY,10,10); 157 g.dispose(); 158 */ 159 } 160 161 @Override 162 public void mousePressed(MouseEvent e) { 163 } 164 165 @Override 166 public void mouseReleased(MouseEvent e) { 167 } 168 169 @Override 170 public void mouseEntered(MouseEvent e) { 171 if(!paintCheck.getState())UpdateCurrGUI(); 172 } 173 174 @Override 175 public void mouseExited(MouseEvent e) { 176 if(!paintCheck.getState())UpdateCurrGUI(); 177 178 } 179 180 181 } 182 183
試したこと
imp.addListener(this);
で実行するとImagePlus型とImageListener型は一致しないというError
補足情報(FW/ツールのバージョンなど)
versionはjdck1.8.0_191です
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。