每次在NetBeans上运行时,用户界面上的对象都会改变外观.为什么



我在NetBeans上编写了一个非常基本的用户界面,它有一个Frame、一个作为框架中标题的标签和一个面板。面板中会包含标签和文本字段。我已经对面板中的前两个标签(Employee IDID Number(和文本字段(txtempidtxtidno(进行了编码,但现在我的问题是,每次运行应用程序测试时,有时标签和文本域都会显示,有时只显示Employee ID,其他什么都不显示,其他时候只显示Employee IDtxtempid,或者除了CCD_ 8之外的所有显示或所有显示正常。每次运行应用程序时,该面板中的对象都会以上述方式之一显示。我已经检查了我的编码,没有错误或警告,一切看起来都是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();
    }
}

尝试用以下内容替换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(...)来执行此操作。

最新更新