我刚刚开始学习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");
}
}
答案 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