2013-07-10 56 views
1

我要缩短我的文本字段,以便它不会延伸到我的JFrame的结束,所以这是现在的样子: enter image description hereGridBagLayout对齐textField?

如何控制文本框的宽度,但这并没有streatch就像我尝试setPreferedSize()和setSize()但他们没有工作?

@Override 
     public void run() { 

      JFrame frame = new JFrame("Test Calculator"); 
      frame.setVisible(true); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setLocationRelativeTo(null); 
      frame.setSize(500, 500); 

      JPanel panel = new JPanel(new GridBagLayout()); 
      frame.getContentPane().add(panel, BorderLayout.NORTH); 
      GridBagConstraints c = new GridBagConstraints(); 

      JLabel testLabel = new JLabel("Enter Score For Test 1: "); 
      c.gridx = 0; 
      c.gridy = 0; 
      c.anchor = GridBagConstraints.WEST; 
      c.fill = GridBagConstraints.BOTH; 
      c.insets = new Insets(40, 15, 15, 0); 
      panel.add(testLabel , c); 


      JTextField txtField1 = new JTextField("TextField"); 
      c.gridx = 1; 
      c.gridy = 0; 
      c.fill = GridBagConstraints.HORIZONTAL; 
      c.weightx = .5; 
      panel.add(txtField1 , c); 
     } 

回答

4

您正在告诉布局文本字段必须水平填充,所以这就是它的作用。更换

c.fill = GridBagConstraints.HORIZONTAL; 

通过

c.fill = GridBagConstraints.NONE; 
3

首先,摆脱这样的:

frame.setSize(500, 500); 

反而让你的组件和布局管理器大小自己填充之后调用您的JFrame pack()并设置其可见之前。

接下来,考虑在主容器周围添加一个空白边框,或者使用容器将空的JLabel添加到GridBagLayout。

你也可以给你的JTextField适当的插图给它一个缓冲。

c.insets = new Insets(40, 15, 15, 40); 
panel.add(txtField1, c); 
+0

“接下来,考虑在主容器周围添加一个空白边框,或者使用容器向GridBagLayout添加空的JLabel”我不明白为什么我需要这样做?请解释一下 – babaysteps

+0

@babaysteps:这一切都取决于你想要做什么。如果你想添加到面板上的所有组件都有一个空白边框,那么给它一个与插入类似的EmptyBorder。如果你想在右边有一个空列,那么在c.gridY = 2的位置上添加一个空白的JLabel。如果您只是想稍微移动JTextField的右端,请按上面所示更改插入。我建议你尝试一下你的代码,并尝试一下这些东西,你也会阅读这些教程。 –

2

通过更改GridBagConstraints gridwidth字段,可以更改特定组件占用的列数。

//this would make the next component take up 2 columns 
c.gridwidth = 2; 
1

你可以有一个JPanel并设置它的尺寸和布局,然后将元素添加到面板和面板添加到您的JFrame。

0

根据您需要完成的工作,可以使用不同的布局类型。我通常喜欢使用Box的。他们有一个允许你创建水平/垂直支柱,建立刚性区域的方法(这是我经常使用)

Box box1 = Box.createHorizontalBox(); 
    Box box2 = Box.createVerticalBox(); 

    box1.add(Box.createRigidArea(new Dimension(30,0))); 
    box1.add(testLabel); 
    box1.add(Box.createRigidArea(new Dimension(30,0))); 
    box1.add(txtField1); 
    box1.add(Box.createRigidArea(new Dimension(30,0))); 

    box2.add(Box.createRigidArea(new Dimension(0,30))); 
    box2.add(box1); 
    box2.add(Box.createRigidArea(new Dimension(0,30))); 

    JFrame.add(box2); 

检查此链接出去的描述以及如何使用所有不同种类的布局:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html