0
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);


    }
}

我想知道,如果我能解释为什么我会得到这样的显示!我在屏幕的顶部中心得到了大小不一的小线形小部件,而不是它们的编码顺序。一旦我设置了尺寸,我不应该得到正确形状的小部件吗?而且小部件不是不可见的,它们是可见的但无序的。

4

4 回答 4

3

一旦我设置了尺寸,我不应该得到正确形状的小部件吗?

不,您不应该设置尺寸,这是布局管理器的工作。面板使用 FlowLayout,它只以首选大小水平显示所有组件。

JLabel 将根据您分配给标签的文本具有首选大小。

对于文本字段,您需要通过指定要显示的字符数来指示近似大小。您可以通过以下方式执行此操作:

JTextField textField = new JTextField(10);

首先阅读有关如何使用流布局的 Swing 教程,以获取示例和更好的结构化程序。那就是您的代码应该在事件调度线程上执行。

于 2013-06-15T19:37:44.867 回答
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
    }
于 2013-06-15T19:25:55.340 回答
0

setVisible(true)必须是方法中的最后一个方法调用frame()。请参阅以下主题:为什么我不应该在添加组件之前调用 setVisible(true)?

于 2013-06-15T19:26:30.480 回答
0

您必须通过在代码中调用setVisible( true )frame() 方法的末尾来设置可见性

于 2013-06-15T19:30:22.930 回答