2013-03-24 195 views
-1

我有一个JFrame表示想是这样的: enter image description hereGUI通过手工编码

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

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

我试图用弹簧的布局,但现在是: enter image description here

所有JTextField的情况都这么大了!

+0

'我可以使用Spring Layout吗?'您不仅限于一个布局管理器。您可以创建多个面板,其中每个面板都有不同的布局。 – camickr 2013-03-24 21:14:24

+0

@camickr更新我的代码,但现在我的JTextField都这么大了...... – Sajad 2013-03-24 21:17:18

+0

我添加了一个答案,以解决上述问题。 – camickr 2013-03-24 21:58:23

回答

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

谢谢你camickr ... – Sajad 2013-03-25 12:01:48

+0

你的第一个陈述运行时有错误... – Sajad 2013-03-25 12:34:58

6

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

+3

@Sajjad:关于''“你能展示正确的代码吗?” - 啊,为什么会破坏你和布局管理者一起玩并且试验你的代码的乐趣?你会从这个练习中学到更多东西,而不是我们用勺子喂你的代码。但请回来,并显示你的代码,如果尝试后它仍然不符合你的喜好。 – 2013-03-24 20:38:22

+0

我应该使用哪个布局管理器? – Sajad 2013-03-24 20:41:46

+0

完全取决于您的需求以及您希望GUI的外观。我建议您的特定情况下的网格布局。 – SevenBits 2013-03-24 20:45:05

0

肯定 - 使用GUI构建器做GUI。你会花更少的时间来投资开发算法。对于Eclipse,有WindowBuilder Pro,NetBeanIDE包含GUI构建器。

+2

没有经验,而且你不会明白的布局或Swing库的雏形。我强烈反对这条路线,特别是在学习Swing时。在你理解了之后,当然,如果需要的话,继续使用它们,但是在这之前这样做会妨碍你获得对图书馆的理解。 – 2013-03-25 00:45:06