我确信在阅读答案结束时我会觉得自己像个完全白痴,但无论如何我都需要帮助。我正在尝试创建我的第一个Java应用程序,切换表单。我正在使用IntelliJ IDE并使用提供的表单设计器创建了一些表单。我希望能够在单击正确的按钮时在表单之间切换。我试图找到问题的答案,但我的问题来自于我缺乏经验和一些关于如何正确实施表格的基本知识。我找到了这个,例如:
btnLogin.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
this.setVisible(false);
new FrmMain().setVisible(true); // Main Form to show after the Login Form..
}
});
我确信使用它可以帮助我实现我想要实现的目标,但这不起作用。 Maily,因为我不知道什么形式的类文件实际应该包含。在制作单一形式的应用程序时,我不需要在表单类中扩展JFrame,但我想(?)我需要在尝试使用此方法在表单之间切换时?我不知道在构造函数中应该出现什么,我不知道我是否需要除了起始窗体类之外的类中的主函数(实际上并不这么认为)。我会粘贴现在的东西。随意教育我应该是什么样子。现在我无法关闭菜单表单,打开其他表单时没有内容(按钮等,不知道原因)。
第一种形式:
package ImplementedUCs;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MenuForm extends JFrame
{
private JPanel MenuPanel;
private JButton loginButton;
private JButton profileButton;
private JButton conferencesButton;
private JButton usersButton;
private JButton settingsButton;
private JButton exitButton;
private JLabel titleLabel;
private JLabel logLabel;
private JLabel userLabel;
public static boolean loginStatus = false;
public static UserTypes loginType = UserTypes.NOT_LOGGED_IN;
public static MenuForm myMenuForm;
public MenuForm()
{
myMenuForm = this;
logLabel.setText("You are currently not logged in!");
userLabel.setText("Please log in to use this application!");
loginButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
// want to close/hide menu form here
new LoggingForm().setVisible(true);
}
});
}
public static void main(String[] args)
{
JFrame menuFrame = new JFrame("MenuForm");
menuFrame.setContentPane(new MenuForm().MenuPanel);
menuFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
menuFrame.pack();
menuFrame.setTitle("ConferenceStation v1.0");
menuFrame.setSize(800,600);
menuFrame.setLocationRelativeTo(null);
menuFrame.setResizable(false);
menuFrame.setVisible(true);
}
}
第二种形式:
package ImplementedUCs;
import javax.swing.*;
public class LoggingForm extends JFrame
{
private JPanel loggingPanel;
private JTextField loginField;
private JPasswordField passwordField;
private JButton remindButton;
private JButton noAccButton;
private JButton loginButton;
private JLabel titleLabel;
private JPanel properPanel;
private JLabel loginLabel;
private JLabel passwordLabel;
private JLabel noAccLabel;
private JLabel forgotLabel;
public LoggingForm()
{
this.setTitle("ConferenceStation v1.0");
this.setSize(800,600);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setVisible(true);
}
}
我真的想了解它应该是什么样子以及如何让它起作用,拜托,我需要帮助。
答案 0 :(得分:-1)
这是一个关于如何使用多个JFrame的示例,即使我不推荐它。为了将来参考,我建议您使用CardLayout
MainFrame.java
import javax.swing.*;
public class MainFrame
{
JFrame mainFrame = new JFrame("Main Frame");
public MainFrame()
{
addComponents();
}
public void addComponents()
{
mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
mainFrame.setLocationRelativeTo(null);
mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
mainFrame.pack();
mainFrame.setVisible(true);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(LoginFrame::new);
}
}
LoginFrame.java
import javax.swing.*;
import java.awt.*;
public class LoginFrame
{
JFrame loginFrame = new JFrame("Login Frame");
public LoginFrame()
{
addComponents();
}
public void addComponents()
{
JButton loginBtn = new JButton("Login");
loginBtn.addActionListener(e -> {
loginFrame.dispose();
SwingUtilities.invokeLater(MainFrame::new);
});
loginFrame.add(loginBtn);
loginFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
loginFrame.setLocationRelativeTo(null);
loginFrame.setPreferredSize(new Dimension(300, 300));
loginFrame.pack();
loginFrame.setVisible(true);
}
}