我有一个想要像这样的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();
}
});
}
}
我正在尝试使用spring布局,但现在是:
所有的jtextfield都很大!!
答案 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构建器。