设置JTextField的首选大小不起作用

时间:2014-05-06 20:17:13

标签: java swing jtextfield preferredsize

我正在尝试设置JTextField的大小,但出于某种原因,它会保持相同的大小并填满整个JPanel,我正在使用setPreferredSize,但这会使没有区别:

JPanel loginJPanel = new JPanel(new BorderLayout());
JTextField usernameJTextField = new JTextField();
usernameJTextField.setPreferredSize(new Dimension(50, 100));
loginJPanel.add(usernameJTextField);

2 个答案:

答案 0 :(得分:1)

确实有所不同,但布局可能会选择忽略首选尺寸设置。 BorderLayout的中心区域尽可能多地获得可用空间。有关详细信息,请参阅How to Use BorderLayout

考虑这个打包框架的示例,结果是文本字段的首选大小得到遵守。但是一旦调整了框架大小,文本字段也会调整大小。

import javax.swing.*;
import java.awt.*;

class Demo {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JPanel loginJPanel = new JPanel(new BorderLayout());
                JTextField usernameJTextField = new JTextField();
                usernameJTextField.setPreferredSize(new Dimension(50, 100));
                loginJPanel.add(usernameJTextField);

                JFrame frame = new JFrame();
                frame.add(loginJPanel);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.pack();
                frame.setLocationByPlatform(true);
                frame.setVisible(true);
            }
        });
    }
}

看一下Visual Guide to Layout Managers,也许你会找到一个更合适的布局来满足你的需求。

另请参阅Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?

编辑:

请注意,通常鼓励您在初始化文本字段时指定列数。该数字用于计算首选宽度。例如textField = new JTextField(20);有关详细信息,请参阅How to Use Text Fields

  

如果您没有指定列数或首选大小,那么   每当文本发生变化时,字段的首选大小都会发生变化   可能导致不必要的布局更新。

答案 1 :(得分:0)

由于您将jpanel的布局管理器设置为BorderLayout,因此默认情况下将jtextfield添加到居中。改为使用null布局。

JPanel loginJPanel = new JPanel(null);