JAVA问题,帮我看一下这个程序,谢谢!! 10
importjavax.swing.*;importjava.awt.*;publicclassLabelTextextendsJFrame{JLabel[]label;...
import javax.swing.*;
import java.awt.*;
public class LabelText extends JFrame{
JLabel[] label;
JPanel panel;
Container con;
public LabelText() {
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);
}
}
为什么执行结果是那样 展开
import java.awt.*;
public class LabelText extends JFrame{
JLabel[] label;
JPanel panel;
Container con;
public LabelText() {
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);
}
}
为什么执行结果是那样 展开
展开全部
你的JFrame和JPanel用的都是流式布局。在这里很显然JPanel是多余的,因为布局一样,不用这个JPanel也是一样的效果。这不是本质问题。
流式布局下,每个组件的实际显示大小用的是“首选”大小的。当你没有对组件的首选大小进行过设置时,JLabel是按内容设定的。而你的JLabel内容都为空,自然是0大小,当然看不见了。
如果你想以合适的大小显示这些JLabel,要么改变布局,要么设定一下每个JLabel的首选大小就可以了。
设定首选大小的方法是:组件.setPreferredSize(Dimension)
以你的程序来说,就是label[i].setPreferredSize(new Dimension(20,10));
放在循环里。
流式布局下,每个组件的实际显示大小用的是“首选”大小的。当你没有对组件的首选大小进行过设置时,JLabel是按内容设定的。而你的JLabel内容都为空,自然是0大小,当然看不见了。
如果你想以合适的大小显示这些JLabel,要么改变布局,要么设定一下每个JLabel的首选大小就可以了。
设定首选大小的方法是:组件.setPreferredSize(Dimension)
以你的程序来说,就是label[i].setPreferredSize(new Dimension(20,10));
放在循环里。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询