JAVA,帮我看一下这个程序有什么问题,谢谢。

来源:百度知道 编辑:UC知道 时间:2024/07/07 21:31:17
代码如下:
import javax.swing.*;
import java.awt.*;
public class LabelText extends JFrame{
JLabel[] label;
JPanel panel;
Container con;
public LabelText() {
super("测试");
con = getContentPane();
con.setLayout(new FlowLayout());
panel = new JPanel(new FlowLayout());
label = new JLabel[5];
for(int i = 0; i < label.length; i++){
label[i] = new JLabel();
label[i].setSize(20, 10);
label[i].setLocation(20 * i + label[i].getWidth(), 30);
label[i].setBackground(Color.red);
panel.add(label[i]);
}
con.add(panel);
setSize(860, 700);
setVisible(true);
}
public static void main(String args[]){
LabelText lt = new LabelText();
lt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
为什么执行结果是那样?

label[i] = new JLabel("name");
在label中添加内容就有显示了

你的JFrame和JPanel用的都是FlowLayout布局。
在此布局下子组件的大小使用的是组件自己的“首选”大小。而JLabel和JTextComponent组件首选大小是按内容计算的(如果没有设置的话)。你的JLable内容为空,那它的大小都是0尺寸,自然你看不见了。
解决方法两种:一是换种布局如GridLayout或null;二是在FlowLayout下设置一下JLabel的首选大小。
设置方法:组件.setPreferredSize(new Dimension(宽,高));