• ベストアンサー

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

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クラスを内部クラスに書き換えたいんですけどどなたか教えてください!

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

  • ベストアンサー
  • world99
  • ベストアンサー率64% (20/31)
回答No.2

そもそも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) {} }

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1
参考URL:
http://www.javaroad.jp/java_class15.htm
すると、全ての回答が全文表示されます。

関連するQ&A