import javax.swing.*;
import java.awt.*;
public class gui {
JFrame f;
JLabel fname,fsex,age;
JTextField t1;
JTextField t2;
JTextField t3;
gui(){
frame();
}
private void frame() {
// TODO Auto-generated method stub
f = new JFrame();
f.setVisible(true);
f.setSize(500,500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fname = new JLabel("First Name");
fname.setSize(100,100);
fsex = new JLabel("Sex");
fsex.setSize(100,100);
age = new JLabel("Age");
age.setSize(100,100);
t1 = new JTextField();
t1.setSize(100,100);
t2 = new JTextField();
t2.setSize(100,100);
t3 = new JTextField();
t3.setSize(100,100);
JPanel panel = new JPanel();
panel.setSize(100,100);
panel.add(fname);
panel.add(t1);
panel.add(fsex);
panel.add(t2);
panel.add(fname);
panel.add(age);
panel.add(t3);
f.add(panel);
}
}
我想知道,如果我能说明为什么我会得到这样的显示器!我在屏幕的顶部中心得到未按小尺寸的小线形小部件,而不是按照它们编码的顺序。 一旦我设置了尺寸,我不应该得到形状正确的小部件。而且小部件也不可见,它们是可见的但是无序的。
答案 0 :(得分:3)
一旦我设定了尺寸,我不应该得到形状合适的小部件。
不,你不应该设置尺寸,这是布局管理器的工作。面板使用FlowLayout,它只是在首选大小水平显示所有组件。
根据您为标签指定的文字,JLabel将具有首选尺寸。
对于文本字段,您需要通过指定要显示的字符数来指示大致的大小。您可以使用以下方法执行此操作:
JTextField textField = new JTextField(10);
首先阅读How to Use Flow Layout上的Swing教程,获取示例和更好的结构化程序。那就是你的代码应该在Event Dispatch Thread上执行。
答案 1 :(得分:1)
您最后必须致电setVisible(true)
。
private void frame() {
// TODO Auto-generated method stub
f = new JFrame();
f.setSize(500,500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fname = new JLabel("First Name");
fname.setSize(100,100);
fsex = new JLabel("Sex");
fsex.setSize(100,100);
age = new JLabel("Age");
age.setSize(100,100);
t1 = new JTextField();
t1.setSize(100,100);
t2 = new JTextField();
t2.setSize(100,100);
t3 = new JTextField();
t3.setSize(100,100);
JPanel panel = new JPanel();
panel.setSize(100,100);
panel.add(fname);
panel.add(t1);
panel.add(fsex);
panel.add(t2);
panel.add(fname);
panel.add(age);
panel.add(t3);
f.add(panel);
f.setVisible(true); //here set visible true after adding components
}
答案 2 :(得分:0)
setVisible(true)
必须是frame()
方法中的最后一个方法调用。请参阅以下主题:Why shouldn't I call setVisible(true) before adding components?
答案 3 :(得分:0)
您必须通过在代码中的frame()方法末尾调用setVisible( true )
来将可见性设置为打开