gpt4 book ai didi

java - 无法使用来自不同类的 JButton 打开新的 JFrame

转载 作者:行者123 更新时间:2023-12-01 10:21:35 25 4
gpt4 key购买 nike

这是我的代码:

登录页面:

public class LoginPage {

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
LoginPage window = new LoginPage();
window.frmLoginPage.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

private JFrame frmLoginPage;
private JPasswordField passwordField;
private JTextField textField;

/**
* Create the application.
*/
public LoginPage() {
initialize();
}

/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmLoginPage = new JFrame();
frmLoginPage.setTitle("Login Page");
frmLoginPage.getContentPane().setBackground(new Color(100, 149, 237));
frmLoginPage.setBounds(100, 100, 742, 597);
frmLoginPage.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmLoginPage.getContentPane().setLayout(null);

JPanel panel = new JPanel();
panel.setBorder(new LineBorder(new Color(0, 0, 0), 3, true));
panel.setBackground(Color.WHITE);
panel.setBounds(131, 106, 459, 288);
frmLoginPage.getContentPane().add(panel);
panel.setLayout(null);

JLabel lblUserLogin = new JLabel("User Login");
lblUserLogin
.setIcon(new ImageIcon(LoginPage.class.getResource("/javax/swing/plaf/metal/icons/ocean/info.png")));
lblUserLogin.setFont(new Font("Trebuchet MS", Font.PLAIN, 34));
lblUserLogin.setHorizontalAlignment(SwingConstants.CENTER);
lblUserLogin.setBounds(114, 16, 243, 39);
panel.add(lblUserLogin);

JLabel lblUserId = new JLabel("User ID:");
lblUserId.setBounds(52, 75, 90, 20);
panel.add(lblUserId);

JLabel lblPassword = new JLabel("Password:");
lblPassword.setBounds(52, 140, 90, 20);
panel.add(lblPassword);

passwordField = new JPasswordField();
passwordField.setBounds(52, 176, 282, 26);
panel.add(passwordField);

textField = new JTextField();
textField.setBounds(52, 98, 283, 26);
panel.add(textField);
textField.setColumns(10);

JButton btnLogIn = new JButton("Log In");
btnLogIn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
new SemesterPage();
frmLoginPage.setVisible(false);
}
});

btnLogIn.setBounds(52, 219, 115, 29);
panel.add(btnLogIn);

JButton btnRegister = new JButton("Register");
btnRegister.setBounds(179, 219, 115, 29);
panel.add(btnRegister);
}

}

当单击“登录”按钮时,该类中应该会弹出一个新窗口:

学期页面:

public class SemesterPage {

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
SemesterPage window = new SemesterPage();
window.frmControlPanel.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

private JFrame frmControlPanel;

/**
* Create the application.
*/
public SemesterPage() {
initialize();
}

/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmControlPanel = new JFrame();
frmControlPanel.setTitle("Control Panel");
frmControlPanel.setBounds(100, 100, 1000, 1000);
frmControlPanel.getContentPane().setBackground(new Color(100, 149, 237));

JPanel panel = new JPanel();
panel.setBorder(new LineBorder(new Color(0, 0, 0), 2, true));

JPanel panel_1 = new JPanel();
panel_1.setBorder(new LineBorder(new Color(0, 0, 0), 2, true));

JPanel panel_2 = new JPanel();
panel_2.setBorder(new LineBorder(new Color(0, 0, 0), 2, true));
GroupLayout groupLayout = new GroupLayout(frmControlPanel.getContentPane());
groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.LEADING).addGroup(groupLayout
.createSequentialGroup().addContainerGap()
.addComponent(panel, GroupLayout.PREFERRED_SIZE, 637, GroupLayout.PREFERRED_SIZE).addGap(30)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(panel_1, GroupLayout.DEFAULT_SIZE, 281, Short.MAX_VALUE)
.addComponent(panel_2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap()));
groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup().addContainerGap()
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(panel, GroupLayout.PREFERRED_SIZE, 793, GroupLayout.PREFERRED_SIZE)
.addGroup(groupLayout.createSequentialGroup()
.addComponent(panel_1, GroupLayout.PREFERRED_SIZE, 370,
GroupLayout.PREFERRED_SIZE)
.addGap(18).addComponent(panel_2, GroupLayout.PREFERRED_SIZE, 412,
GroupLayout.PREFERRED_SIZE)))
.addContainerGap(97, Short.MAX_VALUE)));
frmControlPanel.getContentPane().setLayout(groupLayout);
frmControlPanel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JMenuBar menuBar = new JMenuBar();
frmControlPanel.setJMenuBar(menuBar);

JMenu mnFile = new JMenu("File");
menuBar.add(mnFile);

JMenuItem mntmNew = new JMenuItem("New");
mnFile.add(mntmNew);

JMenuItem mntmSave = new JMenuItem("Save");
mnFile.add(mntmSave);

JMenuItem mntmLogOut = new JMenuItem("Log Out");
mnFile.add(mntmLogOut);
}

}

问题是,窗口没有弹出。单击按钮时没有任何反应。我有一种感觉,当我调用“new SemesterPage()”时,我的 SemesterPage 类中的构造函数不会启动 JFrame。我该如何解决这个问题?

非常感谢!

最佳答案

您创建了 SemesterPage 的新实例,但从未使其可见...

您的 SemesterPage 将需要一个方法,该方法允许调用者指示它希望使其创建的 JFrame 实例可见

也许像...

public class SemesterPage {

private JFrame frmControlPanel;

//...
public void setVisible(boolean v) {
frmControlPanel.setVisible(v);
}

话虽如此,您可能需要稍微重新考虑您的设计......

首先查看 The Use of Multiple JFrames, Good/Bad Practice? .

然后How to Make DialogsHow to Use CardLayout关于替代方案的一些想法

您也可以考虑查看 Model-View-Controller , for example

关于java - 无法使用来自不同类的 JButton 打开新的 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35564479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com