Can';t在Java中添加ActionListener
你能帮我查一下这个密码吗?我怎样才能使单击按钮时,第二个按钮出现?我已经添加了actionlisteners并创建了第二个按钮,但我似乎无法做到这一点。非常感谢大家Can';t在Java中添加ActionListener,java,swing,user-interface,jpanel,jbutton,Java,Swing,User Interface,Jpanel,Jbutton,你能帮我查一下这个密码吗?我怎样才能使单击按钮时,第二个按钮出现?我已经添加了actionlisteners并创建了第二个按钮,但我似乎无法做到这一点。非常感谢大家 import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; public class Skeleton extends JFrame implements ActionListener {
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();
JButton button = new JButton("This is a button.");
JButton button2 = new JButton("Hello");
frame.setSize(600,600);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setContentPane(panel);
panel.setLayout(new FlowLayout());
panel.add(button);
}
public void actionPerformed(ActionEvent e) {
panel.add(button2); //Whenever I compile with this line
//of code inserted, it tells
//me cannot find Button 2
}
}
再次感谢 您的代码有很多问题。首先,您不能在
main()
方法中创建/构建UI
您需要创建一个类的实例并从那里调用该方法
此外,为了能够参考面板
和按钮2
,您需要使它们成为UI方法中的类对象而不是本地对象
您至少需要将ActionListener
添加到按钮
最后,您只需调用panel.revalidate()
,面板就会显示添加的按钮:
public class Skeleton extends JFrame implements ActionListener {
public static void main(String[] args) {
new Skeleton().buildUI();
}
JPanel panel;
JButton button2;
public void buildUI() {
JFrame frame = new JFrame("Skeleton");
panel = new JPanel();
JButton button = new JButton("This is a button.");
button2 = new JButton("Hello");
frame.setSize(600, 600);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setContentPane(panel);
panel.setLayout(new FlowLayout());
panel.add(button);
button.addActionListener(this);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
panel.add(button2);
panel.revalidate();
}
}
此程序无法编译。此GUI存在多个问题。请调试并让我们知道您需要什么帮助。不要让类扩展Jpanel。这没有道理。关于小组问题。将main中的所有代码移动到非静态方法。通过创建类的实例来调用此非静态方法。然后将Panel实例和button2实例设置为类级变量。我已经修复了JButton不出现的问题。谢谢pravat,我用JFrame扩展了主类,它成功了。Tdorno和Vishal K,既然它现在编译并运行良好,您能帮助我使用actionlistener吗?非常感谢你们两位,也谢谢大家。还有一件事:Pravat,创建类的实例是什么意思?对不起,;我完全是个新手。谢谢非常感谢你,萨米!一个专家的回答解释了一些东西:)只有两个问题:那么重新验证和重新喷漆是一样的吗?我没有得到类的实例,因为每次我在main方法外创建一个组件,然后在main方法内调用它,编译器开始给出一些静态和非静态的废话。那么,通过添加“public void buildUI()”和new Skeleton().buildUI()”您到底在做什么呢?非常感谢!没有重新验证与重新绘制不同一个用于验证组件中的所有组件,另一个用于使用
paint()
或update()重新呈现组件JComponent
中的方法。类的实例意味着从类中创建新对象,因此您正在创建一个new Skeleton()
。您可能尝试的是在main中创建一个不同的方法。@AhmedTawfik如果这回答了您的问题,请将其标记为已接受的答案,谢谢!