我在NetBeans上编写了一个非常基本的用户界面,它有一个Frame,一个标签作为框架中的标题,以及一个面板。该面板将包含标签和文本字段。我在面板中编写了前两个标签(Employee ID
和ID Number
)和文本字段(txtempid
和txtidno
),但现在我的问题是每次运行要测试它的应用,有时标签和文字字段都会显示,有时只显示Employee ID
个展示,没有其他内容,其他时间只显示Employee ID
和txtempid
,或者只显示txtidno
显示或一切显示正常。每次运行应用程序时,该面板中的对象都会以上述方式之一显示。我检查了我的编码,没有错误或警告,这一切似乎都是100%。可能导致这种现象的原因是什么?
以下是此界面的编码:
import java.awt.*;
import javax.swing.*;
public class empManUI
{
public empManUI()
{ }
public void layout ()
{
JFrame empManipulate = new javax.swing.JFrame();
empManipulate.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
empManipulate.setSize(720,520);
empManipulate.setVisible(true);
JPanel panel = new javax.swing.JPanel();
panel.setLocation(230, 80);
panel.setSize(450,310);
panel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
panel.setLayout(null);
panel.setVisible(true);
empManipulate.add(panel);
empManipulate.setLayout(null);
JLabel lbltitle = new javax.swing.JLabel();
lbltitle.setText("Employees");
lbltitle.setFont(new java.awt.Font("Excelerate", 1, 42));
lbltitle.setBounds(60, 0, 620, 70);
lbltitle.setForeground(Color.RED);
empManipulate.add(lbltitle);
JLabel lblemp = new javax.swing.JLabel();
lblemp.setText("Employee ID: ");
lblemp.setFont(new java.awt.Font("Alexis", 1, 18));
lblemp.setBounds(20, 30, 170, 13);
lblemp.setVisible(true);
panel.add(lblemp);
JTextField txtempid = new javax.swing.JTextField();
txtempid.setBounds(200, 20, 230, 30);
txtempid.setVisible(true);
panel.add(txtempid);
JLabel lblidno = new javax.swing.JLabel();
lblidno.setText("ID Number: ");
lblidno.setFont(new java.awt.Font("Alexis", 1, 18));
lblidno.setBounds(20, 60, 170, 13);
lblidno.setVisible(true);
panel.add(lblidno);
JTextField txtidno = new javax.swing.JTextField();
txtidno.setBounds(200, 50, 230, 30);
txtidno.setVisible(true);
panel.add(txtidno);
}
public static void main (String[]args)
{
empManUI empUI = new empManUI();
empUI.layout();
}
}
答案 0 :(得分:2)
尝试使用以下内容替换main
:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
empManUI empUI = new empManUI();
empUI.layout();
}
});
}
看看它是否更好。
Swing
特殊。您不能像运行命令行程序一样从main
运行它。您需要以这样的方式启动它,即GUI操作在AWT事件队列中排队并由Dispatch线程处理。您可以通过拨打javax.swing.SwingUtilities.invokeLater(...)
或java.awt.EventQueue.invokeLater(...)
。