Java Swing程序运行时显示不一致

时间:2013-11-20 23:07:37

标签: java swing bluej

我对Java(特别是swing)相对较新,我使用BlueJ IDE来完成一些基本的Swing程序。 问题是,当我运行它时,代码的输出显示没有一致性! 有时它会与所有组件一起正确显示,但有时它只显示绿色面板,但不会显示我添加的任何组件。如果我最大化或拖动窗口并在这些情况下增加它的大小,组件会突然出现。 我会说只有大约三到四次它运行正常。发生了什么,我该如何预防?

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Swing16
{
public static void main()
{


JFrame frame1 = new JFrame("TESTING");

frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setVisible(true);
frame1.setSize(1000,700);
frame1.setLocation(200,100);
//frame1.setResizable(false);


frame1.setLayout(null);


JPanel pan1 = new JPanel();
pan1.setBackground(Color.green);
pan1.setBounds(0,0,900,600);
frame1.add(pan1);


pan1.setLayout(null);

JButton east = new JButton("East");
JButton west = new JButton("West");
JButton north = new JButton("North");
JButton south = new JButton("South");


Color cr1 = new Color(0,127,0);
Font ft1 =new Font("impact",Font.BOLD,25);



north.setForeground(Color.white);
north.setBackground(cr1);

south.setForeground(Color.white);
south.setBackground(cr1);

east.setForeground(Color.white);
east.setBackground(Color.blue);
east.setFont(ft1);
east.setToolTipText(" This is the EAST zone");

west.setForeground(Color.white);
west.setBackground(Color.blue);
west.setFont(ft1);
west.setToolTipText(" This is the WEST zone");




JLabel lb1 = new  JLabel(" Label 1 ");

JLabel lb2 = new  JLabel(" Label 2 ");
lb2.setOpaque(true);
lb2.setForeground(Color.white);
lb2.setBackground(Color.black);
lb2.setFont(ft1);



JTextField tf1 =new JTextField(" TextField1");
tf1.setForeground(Color.white);
tf1.setBackground(Color.black);
tf1.setFont(ft1);
//tf1.selectAll();

JTextField tf2 =new JTextField("TextField 2");
//tf2.getFocus();

JTextArea ta1= new JTextArea("Enter TA",5,30);
ta1.setForeground(Color.white);
ta1.setBackground(Color.black);
//ta1.setFont(ft1);




east.setBounds(400,200,80,100);
pan1.add(east);

west.setBounds(20,200,80,100);
pan1.add(west);

north.setBounds(200,10,100,80);
pan1.add(north);

south.setBounds(200,510,100,80);
pan1.add(south);



lb1.setBounds(0,0,100,50);
pan1.add(lb1);
lb2.setBounds(0,80,100,50);
pan1.add(lb2);


tf1.setBounds(10,350,80,30);
pan1.add(tf1);
tf2.setBounds(10,500,80,30);
pan1.add(tf2);



ta1.setBounds(400,10,100,180);
pan1.add(ta1);




}
}

1 个答案:

答案 0 :(得分:3)

有三件事情跳出来......

  1. 您没有在Event Dispatching Thread
  2. 的上下文中构建UI
  3. 您正在使用null布局
  4. 在您完成构建用户界面之前,您在框架上呼叫setVisible(true)
  5. 首先确保在Event Dispatching Thread ...

    的上下文中启动程序
    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                // Construct your UI here...
            }
        });
    }
    

    有关详细信息,请参阅Initial Threads ...

    并非每个系统都相同。它们可能具有不同的字体指标,DPI,屏幕分辨率,图形管道等......所有这些都会影响UI的呈现方式。为此,您应该使用适当的布局管理器。

    查看Laying Out Components Within a Container

    最后,在你完成构建UI之前,你应该避免在框架上调用setVisible,在某些系统上,这可能会出现一个空白框架