2010-11-29 50 views
1

当我使用下面的代码时,它根本不会改变大小,它仍会填充网格中的区域。更改JBorderLayout中JTextField的大小

JPanel displayPanel = new JPanel(new GridLayout(4, 2)); 

JTextField titleText = new JTextField("title"); 

displayPanel.add(titleText); 

titleText.setSize(200, 24); 

回答

12

从上GridLayout的所述API:

该容器被分成 大小相等的矩形,和一个 组件放置在每个矩形。

尝试使用FlowLayout或GridBagLayout来使您的设置大小变得有意义。另外,@Serplat是正确的。您需要使用setPreferredSize(Dimension)而不是setSize(int, int)

JPanel displayPanel = new JPanel(); 
    // JPanel displayPanel = new JPanel(new GridLayout(4, 2)); 
    // JPanel displayPanel = new JPanel(new BorderLayout()); 
    // JPanel displayPanel = new JPanel(new GridBagLayout()); 

    JTextField titleText = new JTextField("title"); 

    titleText.setPreferredSize(new Dimension(200, 24)); 

    // For FlowLayout and GridLayout, uncomment: 
    displayPanel.add(titleText); 

    // For BorderLayout, uncomment: 
    // displayPanel.add(titleText, BorderLayout.NORTH); 

    // For GridBagLayout, uncomment: 
    // displayPanel.add(titleText, new GridBagConstraints(0, 0, 1, 1, 1.0, 
    // 1.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, 
    // new Insets(0, 0, 0, 0), 0, 0)); 
+0

我喜欢的GridBagLayout做了一些研究就可以了。但是,这两组数字意味着什么?第一个括号之后的那些以及insets和insets中的那些? – Jon 2010-11-30 11:16:58

1

尝试与

setMinSize() 
setMaxSize() 
setPreferredSize() 

这些布局都使用的方法玩的时候就决定什么应该是当前元素的大小。布局管理器调用setSize()并实际覆盖您的值。

2

随着BorderLayout的,你需要使用setPreferredSize代替setSize

1

的最大组成部分添加添加到GridLayout的任何组件将被调整为相同的大小。如果你想有一个组件保持在它的首选大小,然后包裹在一个JPanel该组件,然后面板将被调整:

JPanel displayPanel = new JPanel(new GridLayout(4, 2)); 
JTextField titleText = new JTextField("title"); 
JPanel wrapper = new JPanel(new FlowLayout(0, 0, FlowLayout.LEADING)); 
wrapper.add(titleText); 
displayPanel.add(wrapper); 
//displayPanel.add(titleText);