我对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);
}
}
答案 0 :(得分:3)
有三件事情跳出来......
null
布局setVisible(true)
。首先确保在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
,在某些系统上,这可能会出现一个空白框架