JFormDesigner 的 GUI 显示为空 window
GUI with JFormDesigner displays empty window
我正在尝试使用 JFormDesigner 设计一个简单的登录表单,但在显示我所做的内容时遇到了问题。我在这里搜索了其他主题,但无法为我的代码找到解决方案。我试图分析缺少的内容但无济于事。这也是我第一次使用这个设计器,它与 IntelliJ 的 swing 有点不同,我似乎无法理解正在发生的一切。
public class Login extends JFrame {
public Login() {
initComponents();
}
private void loginButtonActionPerformed(ActionEvent e) {
// TODO add your code here
Operations operations = new Operations();
try {
String usernameStr = usernameField.getText();
String passwordStr = passwordField.getText();
String userTypeStr = userType.getSelectedItem().toString();
if (operations.isLoggedIn(usernameStr, passwordStr, userTypeStr, this)) {
new Dashboard().setVisible(true);
this.dispose();
} else {
JOptionPane.showMessageDialog(this, "Please type correct Username/Password.");
}
} catch (Exception exception) {
JOptionPane.showMessageDialog(this, "Please type correct info.");
}
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
// Generated using JFormDesigner Evaluation license - unknown
frame1 = new JFrame();
label3 = new JLabel();
label2 = new JLabel();
label4 = new JLabel();
usernameField = new JTextField();
label5 = new JLabel();
passwordField = new JTextField();
label6 = new JLabel();
userType = new JComboBox<>();
loginButton = new JButton();
closeButton = new JButton();
//======== frame1 ========
{
frame1.setBackground(new Color(225, 85, 113));
var frame1ContentPane = frame1.getContentPane();
frame1ContentPane.setLayout(new MigLayout(
"hidemode 3",
// columns
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[87,fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[99,fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[95,fill]" +
"[fill]" +
"[fill]" +
"[83,fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[36,fill]" +
"[fill]" +
"[0,fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]",
// rows
"[]" +
"[]" +
"[]" +
"[]" +
"[]" +
"[]" +
"[]" +
"[]" +
"[]"));
//---- label3 ----
label3.setText("Login Form");
label3.setFont(label3.getFont().deriveFont(label3.getFont().getStyle() | Font.BOLD, label3.getFont().getSize() + 12f));
label3.setHorizontalAlignment(SwingConstants.CENTER);
frame1ContentPane.add(label3, "cell 0 0 44 1");
//---- label2 ----
label2.setIcon(new ImageIcon(getClass().getResource("/Images/lock.png")));
label2.setHorizontalTextPosition(SwingConstants.CENTER);
label2.setHorizontalAlignment(SwingConstants.CENTER);
frame1ContentPane.add(label2, "cell 0 1 45 1");
//---- label4 ----
label4.setText("Username");
label4.setFont(new Font("Tw Cen MT", Font.PLAIN, 17));
frame1ContentPane.add(label4, "cell 3 3 4 1");
frame1ContentPane.add(usernameField, "cell 8 3 34 1");
//---- label5 ----
label5.setText("Password");
label5.setFont(new Font("Tw Cen MT", Font.PLAIN, 17));
frame1ContentPane.add(label5, "cell 3 5 4 1");
frame1ContentPane.add(passwordField, "cell 8 5 34 1");
//---- label6 ----
label6.setText("Login as");
label6.setFont(new Font("Tw Cen MT", Font.PLAIN, 17));
frame1ContentPane.add(label6, "cell 3 7 4 1");
//---- userType ----
userType.setModel(new DefaultComboBoxModel<>(new String[] {
"Admin",
"Sales Representative"
}));
frame1ContentPane.add(userType, "cell 8 7 34 1");
//---- loginButton ----
loginButton.setText("Login");
loginButton.addActionListener(e -> loginButtonActionPerformed(e));
frame1ContentPane.add(loginButton, "cell 3 8 39 2");
//---- closeButton ----
closeButton.setText("Close");
frame1ContentPane.add(closeButton, "cell 3 10 39 3");
frame1.pack();
frame1.setLocationRelativeTo(frame1.getOwner());
}
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
// Generated using JFormDesigner Evaluation license - unknown
private JFrame frame1;
private JLabel label3;
private JLabel label2;
private JLabel label4;
private JTextField usernameField;
private JLabel label5;
private JTextField passwordField;
private JLabel label6;
private JComboBox<String> userType;
private JButton loginButton;
private JButton closeButton;
// JFormDesigner - End of variables declaration //GEN-END:variables
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Login GUI = new Login();
GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GUI.setVisible(true);
}
});
}
}
代码主要由设计者生成,我添加了主要方法。如果你伸出援手,那就太好了。
之所以看不到任何东西,是因为在生成的代码中,内容被添加到frame1
。但是您的 GUI
也是 Login
类型,所以您在那里感到困惑。您使用了 GUI.setVisible(true)
,即使此 JFrame 实际上并不包含生成的组件。
要解决此问题,您有两种选择。
- 不要让您的
Login
扩展 JFrame,而是在 initComponents()
方法的末尾设置包含的 JFrame
可见。
- 在
initComponents
方法中将所有组件添加到Login
实例,即this
,并去掉frame1
。然后你可以保持main方法不变。
我正在尝试使用 JFormDesigner 设计一个简单的登录表单,但在显示我所做的内容时遇到了问题。我在这里搜索了其他主题,但无法为我的代码找到解决方案。我试图分析缺少的内容但无济于事。这也是我第一次使用这个设计器,它与 IntelliJ 的 swing 有点不同,我似乎无法理解正在发生的一切。
public class Login extends JFrame {
public Login() {
initComponents();
}
private void loginButtonActionPerformed(ActionEvent e) {
// TODO add your code here
Operations operations = new Operations();
try {
String usernameStr = usernameField.getText();
String passwordStr = passwordField.getText();
String userTypeStr = userType.getSelectedItem().toString();
if (operations.isLoggedIn(usernameStr, passwordStr, userTypeStr, this)) {
new Dashboard().setVisible(true);
this.dispose();
} else {
JOptionPane.showMessageDialog(this, "Please type correct Username/Password.");
}
} catch (Exception exception) {
JOptionPane.showMessageDialog(this, "Please type correct info.");
}
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
// Generated using JFormDesigner Evaluation license - unknown
frame1 = new JFrame();
label3 = new JLabel();
label2 = new JLabel();
label4 = new JLabel();
usernameField = new JTextField();
label5 = new JLabel();
passwordField = new JTextField();
label6 = new JLabel();
userType = new JComboBox<>();
loginButton = new JButton();
closeButton = new JButton();
//======== frame1 ========
{
frame1.setBackground(new Color(225, 85, 113));
var frame1ContentPane = frame1.getContentPane();
frame1ContentPane.setLayout(new MigLayout(
"hidemode 3",
// columns
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[87,fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[99,fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[95,fill]" +
"[fill]" +
"[fill]" +
"[83,fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[36,fill]" +
"[fill]" +
"[0,fill]" +
"[fill]" +
"[fill]" +
"[fill]" +
"[fill]",
// rows
"[]" +
"[]" +
"[]" +
"[]" +
"[]" +
"[]" +
"[]" +
"[]" +
"[]"));
//---- label3 ----
label3.setText("Login Form");
label3.setFont(label3.getFont().deriveFont(label3.getFont().getStyle() | Font.BOLD, label3.getFont().getSize() + 12f));
label3.setHorizontalAlignment(SwingConstants.CENTER);
frame1ContentPane.add(label3, "cell 0 0 44 1");
//---- label2 ----
label2.setIcon(new ImageIcon(getClass().getResource("/Images/lock.png")));
label2.setHorizontalTextPosition(SwingConstants.CENTER);
label2.setHorizontalAlignment(SwingConstants.CENTER);
frame1ContentPane.add(label2, "cell 0 1 45 1");
//---- label4 ----
label4.setText("Username");
label4.setFont(new Font("Tw Cen MT", Font.PLAIN, 17));
frame1ContentPane.add(label4, "cell 3 3 4 1");
frame1ContentPane.add(usernameField, "cell 8 3 34 1");
//---- label5 ----
label5.setText("Password");
label5.setFont(new Font("Tw Cen MT", Font.PLAIN, 17));
frame1ContentPane.add(label5, "cell 3 5 4 1");
frame1ContentPane.add(passwordField, "cell 8 5 34 1");
//---- label6 ----
label6.setText("Login as");
label6.setFont(new Font("Tw Cen MT", Font.PLAIN, 17));
frame1ContentPane.add(label6, "cell 3 7 4 1");
//---- userType ----
userType.setModel(new DefaultComboBoxModel<>(new String[] {
"Admin",
"Sales Representative"
}));
frame1ContentPane.add(userType, "cell 8 7 34 1");
//---- loginButton ----
loginButton.setText("Login");
loginButton.addActionListener(e -> loginButtonActionPerformed(e));
frame1ContentPane.add(loginButton, "cell 3 8 39 2");
//---- closeButton ----
closeButton.setText("Close");
frame1ContentPane.add(closeButton, "cell 3 10 39 3");
frame1.pack();
frame1.setLocationRelativeTo(frame1.getOwner());
}
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
// Generated using JFormDesigner Evaluation license - unknown
private JFrame frame1;
private JLabel label3;
private JLabel label2;
private JLabel label4;
private JTextField usernameField;
private JLabel label5;
private JTextField passwordField;
private JLabel label6;
private JComboBox<String> userType;
private JButton loginButton;
private JButton closeButton;
// JFormDesigner - End of variables declaration //GEN-END:variables
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Login GUI = new Login();
GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GUI.setVisible(true);
}
});
}
}
代码主要由设计者生成,我添加了主要方法。如果你伸出援手,那就太好了。
之所以看不到任何东西,是因为在生成的代码中,内容被添加到frame1
。但是您的 GUI
也是 Login
类型,所以您在那里感到困惑。您使用了 GUI.setVisible(true)
,即使此 JFrame 实际上并不包含生成的组件。
要解决此问题,您有两种选择。
- 不要让您的
Login
扩展 JFrame,而是在initComponents()
方法的末尾设置包含的JFrame
可见。 - 在
initComponents
方法中将所有组件添加到Login
实例,即this
,并去掉frame1
。然后你可以保持main方法不变。