如何从不同的类实现 JButton?

问题描述 投票:0回答:1

我正在做一个项目,在这个项目中,用户将从带有登录和注册按钮的开始屏幕开始,登录按钮将提示他们进入登录屏幕,注册按钮将提示他们登录向上屏幕。

我正在使用一个主类来执行此操作,该主类包含完成此操作所需的类。每个其他类(不是主类)创建一个

JPanel
及其各自的 Swing 组件。

问题: 为来自不同班级的

ActionListener
实施
JButton

我很轻松地整合了显示登录/注册的开始屏幕

JButton
s.

(现在我只是在做一个

ActionListener
从注册按钮到注册
JPanel
- 还没有登录。)

但是,当我到达

ActionListener
JButton
时,我遇到了问题。

我没有语法错误,终端也没有问题(启动屏幕的视觉效果按计划出现)。

但是当我点击注册

JButton
什么都没有发生。

(我所有其他课程都很好,问题出在我的主课上。)

我绝对不确定的代码行是:

StartingScreenPanel startingScreenPanelextra = new StartingScreenPanel();
JButton signUpbutton = startingScreenPanelextra.getsignUpbutton();

signUpbutton.addActionListener((ActionListener) this);

当然还有我创建

ActionListener
和写我的
if
声明的部分,不想真正进入这里,因为它会填满很多空间。


这是我的完整代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class MainGame {
    private JFrame mainFrame;

    public MainGame() {
        mainFrame = new JFrame();
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setSize(468, 832);
    }

    public void addStartingScreenPanel() {
        StartingScreenPanel startingScreenPanel = new StartingScreenPanel();
        JPanel panelStartScreen = startingScreenPanel.getPanelStartScreen();
        StartingScreenPanel startingScreenPanelextra = new StartingScreenPanel();
        JButton signUpbutton = new JButton();// startingScreenPanelextra.getsignUpbutton();
        mainFrame.add(panelStartScreen);
        mainFrame.pack();
        mainFrame.setVisible(true);
        signUpbutton.addActionListener((ActionListener) this);
    }
    
    public void actionPerformed(ActionEvent e) {
        JButton signUpbutton = (JButton) e.getSource();
        SignUpScreenPanel signUpScreenPanel = new SignUpScreenPanel();
        JPanel panelSignUpScreen = signUpScreenPanel.getPanelSignUpScreen();
        StartingScreenPanel startingScreenPanel = new StartingScreenPanel();
        JPanel panelStartScreen = startingScreenPanel.getPanelStartScreen();
        if (e.getSource() == signUpbutton) {
            mainFrame.remove(panelStartScreen);
            mainFrame.revalidate();
            mainFrame.repaint();
            mainFrame.add(panelSignUpScreen);
        }
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                MainGame game = new MainGame();
                game.addStartingScreenPanel();
            }
        });
    }
}

我试图为另一个班级的

ActionListener
实现一个
JButton
,但它没有用。

java swing jbutton actionlistener
1个回答
-1
投票

我想你应该在添加动作侦听器后调用

setVisible
,一切都会正常进行。

© www.soinside.com 2019 - 2024. All rights reserved.