2013-04-22 50 views
1

对于我的课,我需要使用我的ActionListener。我无法将我的ActionListener添加到我的按钮。我必须使用“this”这个词,像this.buttons来添加我的ActionListener,但是Im很难做到这一点。稍后我会到达actionPerformed方法,但我的主要问题是我的ActionListener。Actionlistener java

public class TextButtonsHW extends JFrame implements ActionListener { 
private JButton[] buttons; //Do not change 
private JTextArea textArea; //Do not change 
//Assign values for these constants in the constructor 
private final int ENTER; //Index of Enter button in buttons 
private final int SPACE; //Index of Space button in buttons 
private final int CLEAR; //Index of Clear button in buttons 

/** 
* Set up this frame and its contents. 
* @param title Title to appear in JFrame title bar 
*/ 
public TextButtonsHW(String title) { 

    super(title); //call parent JFrame constructor to set the title 

    buttons = new JButton[] { new JButton("A"), new JButton("B"), new JButton("C"), 
        new JButton("1"), new JButton("2"), new JButton("3"), 
        new JButton("X"), new JButton("Y"), new JButton("Z"), 
        new JButton("Enter"), new JButton("Space"), new JButton("Clear")}; 

    ENTER = buttons.length-3; 
    SPACE = buttons.length-2; 
    CLEAR = buttons.length-1; 

    textArea = new JTextArea(15, 5); 
    textArea.setEditable(false); 

    this.buttons[0].addActionListener(I dont know what to put right here); 

    //TODO: instantiate all JButtons, add them to the buttons array, 
    // and register "this" as the ActionListener for each button. 
    //DONE 
    //TODO: assign values to ENTER, SPACE, and CLEAR constants to 
    // indicate the indexes of those buttons in the buttons array 
    //DONE 
    //TODO: create the JTextArea textArea 
    //TODO: set its "editable" property to false 
    //DONE 
    //Create a TextButtonsHWPanel to display the buttons and textArea 

    TextButtonsHWPanel mainPanel = new TextButtonsHWPanel(buttons, textArea); 
    this.getContentPane().add(mainPanel); 
    this.pack(); 
} 


public void actionPerformed(ActionEvent e) { 


    //TODO: update the text of textArea according to which 
    // button generated the ActionEvent. 

} 


public static void main(String[] args) { 
    final TextButtonsHW f = new TextButtonsHW("Text Buttons"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setLocationRelativeTo(null); //centers frame on screen 
    f.setVisible(true); 
} 

}

+0

如果你输入ENTER会更好。 SPACE,CLEAR类型枚举而不是int。 – Abraham 2013-04-22 04:12:22

+0

我看到它可能是如何,但我的任务想要它那样 – Chris 2013-04-22 04:13:58

回答

5
buttons[0].addActionListener(this); 
+0

啊谢谢你!你真棒! – Chris 2013-04-22 04:11:26

+0

记住addActionListener的参数是一个实现了actionPerformed方法的类,在这种情况下,该方法是定义addActionListner并因此定义“this”的相同类。 – Abraham 2013-04-22 04:14:52

2

既然你有12个按钮,你也可以去一个for循环来的ActionListener添加到您的所有按钮,即

for(int i=0; i<12; i++) 
{ 
    buttons[i].addActionListener(this); 
} 

取而代之的是长码即

buttons[0].addActionListener(this); 
buttons[1].addActionListener(this); 
........................ 
0

虽然buttons[0].addActionListener(this);将工作得很好,从设计的角度来看,我会建议有单独的类(可能是内部类),它实现了ActionListner并将其对象引用传递给该方法。

面向对象编程的重点是将不同的职责委托给不同的对象(类),因此代码变得更易维护和可重用。