GUI手工编码

时间:2013-03-24 20:34:06

标签: java swing

我有一个想要像这样的jframe: enter image description here

这是我的代码,但是显示全屏按钮!

public class editFrame extends JFrame {

JButton saveButton;
JButton cancelButton;

public editFrame() {
    Component add = this.add(createForm());
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setBounds(100, 50, 500, 600);
    this.setVisible(true);
}

public JPanel createForm() {
    String[] labels = {"ID", "Name", "Date", "Borrow Status"};
    // Create and populate jpanel
    JPanel panel = new JPanel();
    for (int i = 0; i < 4; i++) {
        JLabel l = new JLabel(labels[i], JLabel.TRAILING);
        panel.add(l);
        JTextField textField = new JTextField(10);
        l.setLabelFor(textField);
        panel.add(textField);
    }
    SpringLayout sL = new SpringLayout();
    panel.setLayout(sL);
    SpringUtilities.makeCompactGrid(panel, 4, 2, 6, 6, 6, 6);

    return panel;
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            editFrame edF = new editFrame();
        }
    });
}
}

我正在尝试使用spring布局,但现在是: enter image description here

所有的jtextfield都很大!!

3 个答案:

答案 0 :(得分:6)

查看布局管理器教程和API。在那里你会看到JFrame的contentPane默认使用BorderLayout。使用容器向BorderLayout添加组件而不指定布局常量时,会添加BorderLayout.CENTER,占用整个空间并覆盖之前添加的任何内容。解决方案是查看布局管理器教程,然后开始使用各种布局。请注意,您通常会嵌套JPanel,每个都使用自己的布局以简单的方式实现复杂的GUI。

答案 1 :(得分:3)

  

所有的jtextfield都很大!!

这是因为SpringLayout会根据可用空间调整字段大小。

如果您不希望它们增长,您可以这样做:

//Component add = this.add(createForm());
Component add = this.add(createForm(), BorderLayout.NORTH);

或者,如果您不希望它们在宽度或高度上增长,您可以将面板包裹在使用FlowLayout的面板中,因为这将尊重组件的首选大小:

//Component add = this.add(createForm());
JPanel wrapper = new JPanel();
wrapper.add( createForm() ) ;
add( wrapper );

答案 2 :(得分:0)

当然 - 使用GUI构建器来执行GUI。您将花费更少的时间来投资开发算法。对于Eclipse,有WindowBuilder Pro,NetBeanIDE包含GUI构建器。