前提
Javaを最近勉強し始めた初心者です。
独学で愛のJava256本ノックに取り組む中で、マウスイベント処理の問題:「MousePositionマウスカーソルの動きを追跡せよ!」にてマウスをドラックした時にだけ色を出し分ける方法が分からず困っています。
機能は非常に簡単で、マウスをウィンドウ上で動かした時に座標位置を取得して表示しているだけです。
この機能自体は元々サイトに掲載されているので問題ありません。
追加課題で「ドラッグした時には色を変えるようにする」というものがあるのですが、これの処理方法がわかりません。
実現したいこと
ドラッグしていない時は黒字で、ドラッグしている時は赤字で座標情報を表示すること。
困っていること
やり方として以下の2つしかないように思うのですが、Swingの挙動を理解できていないのでいずれもやり方が分からず途方にくれています。
似たような質問などがないか調べたのですが、うまく探すことができず困っております。
- paintComponentの中でドラッグ状態か否かで条件分岐して黒か赤か指定する
- mouseDraggedの中で色を赤に指定し直す
おそらく本当に初歩の初歩の質問だと思い恐縮ですが、どなたかご教示いただけますと幸いです。
該当のソースコード
Java17
1import java.awt.Color; 2import java.awt.Graphics; 3import java.awt.Toolkit; 4import java.awt.event.MouseEvent; 5import java.awt.event.MouseMotionListener; 6 7import javax.swing.JFrame; 8import javax.swing.JPanel; 9 10public class MousePosition extends JFrame { 11 12 public MousePosition() { 13 add(new DrawPanel()); 14 } 15 16 public static void main(String[] args) { 17 Toolkit.getDefaultToolkit().setDynamicLayout(true); 18 19 JFrame L00 = new MousePosition(); 20 L00.setTitle("マウスの座標を表示"); 21 L00.setDefaultCloseOperation(EXIT_ON_CLOSE); 22 L00.setBackground(Color.white); 23 L00.setSize(320, 240); 24 L00.setVisible(true); 25 } 26} 27 28class DrawPanel extends JPanel implements MouseMotionListener { 29 int xCoordinate; 30 int yCoordinate; 31 32 public DrawPanel() { 33 setBackground(Color.white); 34 addMouseMotionListener(this); 35 } 36 37 public void paintComponent(Graphics g) { 38 super.paintComponent(g); 39 String output = String.format("(%d, %d)", xCoordinate, yCoordinate); 40 g.setColor(Color.black); 41 g.drawString(output, xCoordinate, yCoordinate); 42 } 43 44 public void mouseMoved(MouseEvent e) { 45 xCoordinate = e.getX(); 46 yCoordinate = e.getY(); 47 repaint(); 48 } 49 50 public void mouseDragged(MouseEvent e) { 51 xCoordinate = e.getX(); 52 yCoordinate = e.getY(); 53 repaint(); 54 55 56 } 57} 58
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/08 14:38
2023/01/09 01:50