Java actionlistener不起作用

时间:2013-07-04 17:55:03

标签: java swing jbutton actionlistener mouselistener

我刚刚开始学习Java 1周前,而且我是100%完全初学者。在这段代码中,我似乎无法将actionlistener / get一个工作。尽管阅读了几十个教程,我甚至不知道在哪里/以何种方式放置它。我已经创建了一个带有JPanel的JFrame,而在JPanel上则有一个按钮。到目前为止这么好(和工作)。但是,我希望它如此,如果单击该按钮,则会出现另一个按钮。提前谢谢你!

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class Skeleton extends JFrame implements ActionListener {

    public static void main(String[] args) {
    //------------------------------------------------
    JFrame frame = new JFrame("Skeleton");
    JPanel panel = new JPanel();
frame.setContentPane(panel);
    frame.setSize(600,600);
    frame.setResizable(false);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    JButton button = new JButton("This is a button.");
    JButton button2 = new JButton("Hello");
    panel.setLayout(null);
    button.setBounds(20,20,200,25);
    button2.setBounds(20,70,200,25);
    panel.add(button);
   //-------------------------------------------

button.addMouseListener(this);


}

public void ActionPerformed(ActionEvent e) {
    System.out.println("Hello");

}
}

2 个答案:

答案 0 :(得分:4)

我会给你一些建议

1)不要在顶级类中实现ActionListener,而是使用匿名类或私有类。

示例:

匿名类(也称为Swing Actions)

myComponent.addActionListener(new ActionListener(){
      @Override
      public void actionPerformed(ActionEvent evt){
              //code here
      }

})

//inner class
public class Skeleton{

// in some part
private class MyActionListener implements ActionListener{
      public void actionPerformed(ActionEvent evt){
             //code here
       }
}


}

2)您的代码将无法编译,因为您没有实现ActionListener接口

public void actionPerformed(ActionEvent evt)是签名。

您必须addActionListener到您的组件

button.addActionListener(this);

3)不要使用null布局,因为如果你想添加更多的组件或调整窗口大小你会遇到很多问题,因为你必须手动setBounds,而且会使用{{ 1}}。

4)例如,如果不是必要的话,请尝试不扩展JFrame,而在类中有引用。

[Layout Manager][1]

答案 1 :(得分:2)

您需要添加actionlistener。

将事件处理程序类的实例注册为一个或多个组件上的侦听器。例如:

yourdesiredcomponent.addActionListener(this);

有关详细信息,请查看doc