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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Q&A

解決済

1回答

404閲覧

[Java][Swing]マウス操作のドラッグ状態の有無により出力文字を色分けする方法

uk98

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

0グッド

0クリップ

投稿2023/01/08 06:02

前提

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

位置と同様に「ドラッグ状態か否か」を状態として持てばいい。

diff

1@@ -29,6 +29,8 @@ 2 int xCoordinate; 3 int yCoordinate; 4 5+ private boolean isMouseDragged; 6+ 7 public DrawPanel() { 8 setBackground(Color.white); 9 addMouseMotionListener(this); 10@@ -37,19 +39,21 @@ 11 public void paintComponent(Graphics g) { 12 super.paintComponent(g); 13 String output = String.format("(%d, %d)", xCoordinate, yCoordinate); 14- g.setColor(Color.black); 15+ g.setColor(isMouseDragged ? Color.red : Color.black); 16 g.drawString(output, xCoordinate, yCoordinate); 17 } 18 19 public void mouseMoved(MouseEvent e) { 20 xCoordinate = e.getX(); 21 yCoordinate = e.getY(); 22+ isMouseDragged = false; 23 repaint(); 24 } 25 26 public void mouseDragged(MouseEvent e) { 27 xCoordinate = e.getX(); 28 yCoordinate = e.getY(); 29+ isMouseDragged = true; 30 repaint();

投稿2023/01/08 07:35

shiketa

総合スコア3971

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

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

uk98

2023/01/08 14:38

なるほど、このようにMouseEventの中でboolean型の変数に代入をして、それをキーにペイントコンポーネントを条件分岐させることで実現できるんですね。ありがとうございます、引き続き勉強がんばります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問