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

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

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

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

Q&A

1回答

2701閲覧

マウスクリックした位置の座標を保持し続けたい

hideaki_ohyama

総合スコア0

Java

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

0グッド

0クリップ

投稿2020/07/26 09:56

マウスクリックした座標(x,y)を保持し続けたいのですが上手くいきません。必ず次のクリックで消えてしまいます。
具体的には以下の通りです(実際のプログラムでは他に描画のメソッドが入るのですが省略しています)。
class MyMouseActionListener extends MouseAdapter{
int clickCounter = 0;

public void mouseClicked(MouseEvent evt){ x = evt.getX(); y = evt.getY(); System.out.println("( "+x+" , "+y+" )"); clickCounter ++; System.out.println( "No." + clickCounter + "click" ); List<Integer> list = new LinkedList<Integer>(); list.add(x); for(Integer x : list){ System.out.println( list ); }

このままでは1回クリックする毎に前のクリックの情報がクリアされてしまいます。

実際のプログラムではクリックする度に図形が表示されるのですが、次のクリック後も一度表示された図形を残したままとしたいのですが、全て消えてしまいます。どうすれば保持出来ますでしょうか?

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

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

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

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

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

m.ts10806

2020/07/26 10:02

いつまでどういう頻度で保持したいのでしょう。 あと、コードはマークダウンのcode機能にてご提示ください。
Q71

2020/07/26 10:11

仕様の整理をしましょう。 「リストにして保持すれば」と思ったのですが、それでいいのか、書いてあることからはわかりません。
hideaki_ohyama

2020/07/26 10:30

保持はプログラムを終了するまで半永久的に常にしたいです。 マークダウンのcode機能というのはよくわかりません。 リストに保持されればOKです。
guest

回答1

0

list が mouseClikedメソッドのローカル変数だったら、この関数から戻る時に
無くなってしまいます。クラスのフィールドにしましょう。
list.size() が使えるので clickCounter は要りません。

こんなサンプルを書いてみました。

Java

1import java.awt.*; // Graphics, Color; 2import java.awt.event.*; // MouseAdapter, MouseEvent 3import javax.swing.*; // JFrame, Jpanel 4import java.util.List; 5import java.util.LinkedList; 6 7class Main extends JFrame { 8 public static void main(String[] args) { new Main(); } 9 10 Main() { 11 setSize(650, 680); 12 setTitle("Lines"); 13 setLocationRelativeTo(null); 14 setDefaultCloseOperation(EXIT_ON_CLOSE); 15 add(new Canvas()); 16 setVisible(true); 17 } 18} 19 20class Canvas extends JPanel { 21 class Point { 22 int x, y; 23 Point(int x, int y) { this.x = x; this.y = y; } 24 }; 25 List<Point> list = new LinkedList<Point>(); 26 BasicStroke bs = new BasicStroke(5); 27 28 Canvas() { 29 addMouseListener(new MyMouseActionListener()); 30 } 31 32 class MyMouseActionListener extends MouseAdapter { 33 public void mouseClicked(MouseEvent evt) { 34 int x = evt.getX(), y = evt.getY(); 35 list.add(new Point(x, y)); 36 repaint(); 37 } 38 } 39 40 public void paintComponent(Graphics g) { 41 super.paintComponent(g); 42 g.setColor(Color.BLACK); 43 ((Graphics2D)g).setStroke(bs); 44 for (int i = 1; i < list.size(); i++) { 45 Point p1 = list.get(i-1), p2 = list.get(i); 46 g.drawLine(p1.x, p1.y, p2.x, p2.y); 47 } 48 } 49}

投稿2020/07/26 12:50

kazuma-s

総合スコア8224

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問