我正在做一个项目,在这个项目中,用户将从带有登录和注册按钮的开始屏幕开始,登录按钮将提示他们进入登录屏幕,注册按钮将提示他们登录向上屏幕。
我正在使用一个主类来执行此操作,该主类包含完成此操作所需的类。每个其他类(不是主类)创建一个
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
,但它没有用。
我想你应该在添加动作侦听器后调用
setVisible
,一切都会正常进行。