2016-04-09 13 views
0

同じJFrameの2つのボタンを使用してそれぞれ異なるタスクを実行したいと思います。 1つは右のラベルを変更し、もう1つは中央の円の色を変更します。プログラムはJavaの内部クラスを認識しません

何らかの未知の理由により、メインクラス(クラスTwoButtons)内に存在する内部クラスをプログラムが認識していないように見えることがあります。私はかなりJavaに新しい、私は間違ってやっていることを見つけることができません....あなたは私の問題を解決するために私を助けてくれますか?

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

public class TwoButtons { 
    JFrame frame; 
    JLabel label; 


    public static void main(String[] args) { 
     TwoButtons gui = new TwoButtons(); 
     gui.go(); 

    } 
    public void go(){ 
     frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JButton labelButton = new JButton("Change label"); 
     labelButton.addActionListener(new LabelListener()); 

     JButton colorButton = new JButton("Change cirle"); 
     colorButton.addActionListener(new ColorListener()); 

     label = new JLabel("I'm a labele"); 
     MyDrawPanel drawPanel = new MyDrawPanel(); 

     frame.getContentPane().add(BorderLayout.SOUTH, colorButton); 
     frame.getContentPane().add(BorderLayout.CENTER, drawPanel); 
     frame.getContentPane().add(BorderLayout.WEST, labelButton); 
     frame.getContentPane().add(BorderLayout.EAST, label); 
     frame.setSize(300, 300); 
     frame.setVisible(true); 

     class LabelListener implements ActionListener { 
      public void actionPerformed(ActionEvent event) { 
      label.setText("Ouch!"); 

      } 
     } 
     class ColorListener implements ActionListener { 
      public void actionPerformed(ActionEvent event) { 
      frame.repaint(); 
      } 
     } 


     } 


    } 

私は

labelButton.addActionListener(new LabelListener()); 

上のエラーを取得し、

colorButton.addActionListener(new ColorListener()); 

にそれはLabelListenerとColorListenerの両方がタイプとして解決することはできません両方の機会に述べています。
あらかじめありがとうございます!! Javaで

+2

者は、ローカルクラスです。それらはメソッド内で宣言されます。それらを使用する前にそれらを宣言してください。 – Savior

答えて

2

あなたはLabelListenerColorListenerます。public void行くのうち、()メソッド

012クラスを移動する必要があります

class ColorListener implements ActionListener { 
    public void actionPerformed(ActionEvent event) { 
     frame.repaint(); 
    } 
} 
1

、あなたがそれらを使用した後の方法で(ちょうどメソッド内の変数など)のクラスを定義し、その代わりに、class TwoButtons内のクラスColorListenerLabelListenerを定義してみてください、代わりのgo方法でそれらを定義する、などのことができませんそう:(これは一般的に、より良い習慣です)

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

public class TwoButtons { 
    JFrame frame; 
    JLabel label; 

    public static void main(String[] args) { 
     TwoButtons gui = new TwoButtons(); 
     gui.go(); 
    } 

    public void go(){ 
     frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JButton labelButton = new JButton("Change label"); 
     labelButton.addActionListener(new LabelListener()); 

     JButton colorButton = new JButton("Change cirle"); 
     colorButton.addActionListener(new ColorListener()); 

     label = new JLabel("I'm a labele"); 
     MyDrawPanel drawPanel = new MyDrawPanel(); 

     frame.getContentPane().add(BorderLayout.SOUTH, colorButton); 
     frame.getContentPane().add(BorderLayout.CENTER, drawPanel); 
     frame.getContentPane().add(BorderLayout.WEST, labelButton); 
     frame.getContentPane().add(BorderLayout.EAST, label); 
     frame.setSize(300, 300); 
     frame.setVisible(true); 
    } 

    class LabelListener implements ActionListener { 
     public void actionPerformed(ActionEvent event) { 
      label.setText("Ouch!"); 
     } 
    } 

    class ColorListener implements ActionListener { 
     public void actionPerformed(ActionEvent event) { 
      frame.repaint(); 
     } 
    } 
} 
関連する問題