我认为这是一件简单的事情,但是我在Google中找不到对我有帮助的东西。

我有一个像菜单一样扩展JPanel的类,用户没有单击开始按钮,而是调用了另一个扩展JPanel的类,但是它不起作用。
我在主方法中调用的第一个类是简单的JFrame,代码如下:

JFrame tela = new JFrame("teste");
    tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    tela.setSize(800,600);
    tela.add(new InitialScreen());

    tela.setVisible(true);


在InitialScreen中,我有一个带有以下actionEvent的按钮:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    this.add(new BackgroundGame());
    this.validate();
    this.revalidate();
    this.setVisible(true);
}


但与此同时我按下按钮,什么也没有发生。

有人能帮我吗?

谢谢。

最佳答案

您将需要在代码中包含以下内容:

    JButton button1 = new JButton("Button 1");
    InitialScreen panel = new InitialScreen(); // I am assuming this is a JPanel
    button1.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            // TODO add your logic
        }
    });
    panel.add(button);
    tela.add(panel);


使用this运算符时要小心。如果按照我的示例进行操作,将无法使用this。您将需要使用ActionEvent对象来获取源对象,或者需要引用一些全局变量。例如您的情况下的tela

另外,我认为将InitialScreen设为匿名对象也不是一个好主意。您应该像上面一样创建一个显式实例。

该按钮应该在面板内部声明,我显示的逻辑应该在InitialScreen面板类中。在框架中,您唯一需要做的就是创建InitialScreen的实例并将其添加到框架中。

07-24 09:30