1

ボタンをテストしようとしていますが、アクション リスナーを動作させることができません

public class ButtonTester implements ActionListener {

static JLabel Label = new JLabel("Hello Buttons! Will You Work?!");
public static void main(String[] args) {
    //Creating a Label for step 3
    // now for buttons
    JButton Button1 = new JButton("Test if Button Worked");
    // step 1: create the frame
    JFrame frame = new JFrame ("FrameDemo");
    //step 2: set frame behaviors (close buttons and stuff)
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //step 3: create labels to put in the frame
    frame.getContentPane().add(Label, BorderLayout.NORTH);
    frame.getContentPane().add(Button1, BorderLayout.AFTER_LAST_LINE);
    //step 4: Size the frame
    frame.pack();
    //step 5: show the frame 
    frame.setVisible(true);
    Button1.setActionCommand("Test");
    Button1.setEnabled(true);
    Button1.addActionListener(this); //this line here won't work
}
@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    if("Test".equals(e.getActionCommand()))
    {
        Label.setText("It Worked!!!");
    }
  }

}
4

3 に答える 3

3

thisstaticメソッドにコンテキストがありません

代わりに、代わりに次のようなものを使用してみてくださいButton1.addActionListener(new ButtonTester());...

更新しました

Swing にはいくつかの特定の要件があるため、初期スレッドを確認することもできます...

于 2013-08-07T02:18:08.857 に答える
3

静的メソッドはクラスのインスタンスに関連付けられていないため、this使用できません。

すべてのコードを main から ButtonTester の非静的メソッド (run()たとえば ) に移動し、main から次のようなことを行うことができます。

new ButtonTester().run();

ActionListener に匿名の内部クラスを使用することもできます。

Button1.addActionLister(new ActionListener() {
    @Override public void actionPerformed (ActionEvent e) {
        // ... 
    }
});
于 2013-08-07T02:18:38.010 に答える