-1

我有一个希望是这样的 jframe: 在此处输入图像描述

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

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();
        }
    });
}
}

我正在尝试使用弹簧布局,但现在是: 在此处输入图像描述

所有的 jtextfield 都这么大!!

4

3 回答 3

6

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

于 2013-03-24T20:35:18.787 回答
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 );
于 2013-03-24T21:56:03.433 回答
0

绝对 - 使用 GUI 构建器来做 GUI。您将花费更少的时间来开发算法。对于 Eclipse,有WindowBuilder Pro,NetBeanIDE 有 GUI builder。

于 2013-03-24T21:29:13.043 回答