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

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

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

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

Swing

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

2187閲覧

Java 直線を描画するプログラム

tedmosby

総合スコア46

Java

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

Swing

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2019/11/12 13:41

現在、Javaでマウスを押した点からマウスを離した点までの直線を描画するプログラムを以下のように作成しています。

しかし、マウスを押した点と離した点の座標はとってこれているのですが、直線が描画されません。
おそらく些細なミスと予想されますが、本人では全くにづかないため、お気づきの方がいれば教えていただきたいです!

Java

1import java.awt.Container; 2import java.awt.Graphics; 3import java.awt.event.MouseEvent; 4import java.awt.event.MouseListener; 5 6import javax.swing.JFrame; 7import javax.swing.JPanel; 8 9class MousePos extends JPanel implements MouseListener{ 10 private int x, y, u, v; 11 private int w; 12 13 public static void main(String[] args) { 14 JFrame f = new JFrame(); 15 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 16 f.setSize(400, 400); 17 f.setTitle("MousePos"); 18 Container c = f.getContentPane(); 19 20 MousePos ml = new MousePos(); 21 c.add(ml); 22 f.setVisible(true); 23 } 24 25 public MousePos(){ 26 addMouseListener(this); 27 x = -10; 28 y = -10; 29 w = 4; 30 } 31 32 public void paintComponent(Graphics g){ 33 super.paintComponent(g); 34 g.drawLine(x,y,u,v); 35 } 36 37 public void mousePressed(MouseEvent e){ 38 x = e.getX() - w/2; 39 y = e.getY() - w/2; 40 System.out.println("x: " + x + " y: " + y); 41 } 42 43 public void mouseReleased(MouseEvent e){ 44 u = e.getX() - w/2; 45 v = e.getY() - w/2; 46 System.out.println("u: " + u + " v: " + v); 47 48 } 49 50 public void mouseClicked(MouseEvent e){} 51 public void mouseEntered(MouseEvent e){} 52 public void mouseExited(MouseEvent e){} 53 54}

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

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

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

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

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

guest

回答1

0

ベストアンサー

mouseReleased の最後のところで repaint() してみては?

repaint() では最後の線を書く前にキャンバスがクリアされるので、それがご希望に合わないとのことなので以下をお試しください。

paintComponent メソッドをメソッド名も含め次のように変える。

java

1 private void draw() { 2 Graphics g = getGraphics(); 3 g.drawLine(x, y, u, v); 4 g.dispose(); 5 }

mouseReleased の最後のところに入れた repaint() を 上の draw() に変える。

投稿2019/11/12 13:55

編集2019/11/12 15:28
ironya

総合スコア454

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

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

tedmosby

2019/11/12 14:07

追加してみたのですが、一本一本の直線が移り変わっていくようになっているので、上に追加していけるようにしたいです....
ironya

2019/11/12 15:32

回答に追記しました。
tedmosby

2019/11/15 14:31

わざわざありがとうございます???? 修正できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問