Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t在Java中添加ActionListener_Java_Swing_User Interface_Jpanel_Jbutton - Fatal编程技术网

Can';t在Java中添加ActionListener

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 {     

你能帮我查一下这个密码吗?我怎样才能使单击按钮时,第二个按钮出现?我已经添加了actionlisteners并创建了第二个按钮,但我似乎无法做到这一点。非常感谢大家

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如果这回答了您的问题,请将其标记为已接受的答案,谢谢!