みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

内部クラスにする方法教えてください!

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Line extends JPanel {
int x0, y0, x1, y1;

public static class WindowCloser extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}

public static class ClickTracker extends MouseAdapter {
private Line line;
public ClickTracker(Line enclosing) {
line = enclosing;
}
public void mouseClicked(MouseEvent e) {
line.x0 = line.x1;
line.y0 = line.y1;
line.x1 = e.getX(); // MouseEventクラスのgetXメソッドでマウスのx座標値を取得
line.y1 = e.getY(); // MouseEventクラスのgetYメソッドでマウスのx座標値を取得
line.repaint(); // ウィンドウの表示を再描画

}
}

public Line() {
x0 = y0 = x1 = y1 = 0;
addMouseListener(new ClickTracker(this));
JFrame frame = new JFrame();
frame.addWindowListener(new WindowCloser());
frame.getContentPane().add(this);
frame.setSize(300,300);
frame.setVisible(true);
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(x0, y0, x1, y1);
}

public static void main(String[] args) {
Line c = new Line();
}
}

上のプログラムのClickTrackerクラスを内部クラスに書き換えたいんですけどどなたか教えてください!

投稿日時 - 2006-12-26 16:00:52

QNo.2626751

すぐに回答ほしいです

質問者が選んだベストアンサー

そもそもClickTrackerクラスは内部クラスではないでしょうか?
ご要望とは、違いますが、次の箇所を精査してみました。
1.WindowCloser内部クラスの匿名クラス化。
2.ClickTrakerクラスをLineクラスのimplementsにする。
ご参考までにどうぞ。
以下、書き換えたプログラムになります。
--------------------------------------------------
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Line extends JPanel implements MouseListener {
int x0, y0, x1, y1;

//public static class WindowCloser extends WindowAdapter {
//public void windowClosing(WindowEvent e) {
//System.exit(0);
//}
//}
//
//public static class ClickTracker extends MouseAdapter {
//private Line line;
//
//public ClickTracker(Line enclosing) {
//line = enclosing;
//}
//
//public void mouseClicked(MouseEvent e) {
//line.x0 = line.x1;
//line.y0 = line.y1;
//line.x1 = e.getX(); // MouseEventクラスのgetXメソッドでマウスのx座標値を取得
//line.y1 = e.getY(); // MouseEventクラスのgetYメソッドでマウスのx座標値を取得
//line.repaint(); // ウィンドウの表示を再描画
//
//}
//}

public Line() {
x0 = y0 = x1 = y1 = 0;
//addMouseListener(new ClickTracker(this));
addMouseListener(this);// implementsしたMouseListenerを追加
JFrame frame = new JFrame();
//frame.addWindowListener(new WindowCloser());
frame.addWindowListener(new WindowAdapter() {// 匿名クラスを追加
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.getContentPane().add(this);
frame.setSize(300, 300);
frame.setVisible(true);
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(x0, y0, x1, y1);
}

public static void main(String[] args) {
Line c = new Line();
}

// ClickTrackerクラスの処理を実装
public void mouseClicked(MouseEvent e) {
x0 = x1;
y0 = y1;
x1 = e.getX(); // MouseEventクラスのgetXメソッドでマウスのx座標値を取得
y1 = e.getY(); // MouseEventクラスのgetYメソッドでマウスのx座標値を取得
repaint(); // ウィンドウの表示を再描画

}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}

投稿日時 - 2006-12-29 17:34:53

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

こちらをどうぞ。
http://www.javaroad.jp/java_class15.htm

参考URL:http://www.javaroad.jp/java_class15.htm

投稿日時 - 2006-12-26 16:42:52

あなたにオススメの質問