我正在尝试设置JTextField
的大小,但出于某种原因,它会保持相同的大小并填满整个JPanel
,我正在使用setPreferredSize
,但这会使没有区别:
JPanel loginJPanel = new JPanel(new BorderLayout());
JTextField usernameJTextField = new JTextField();
usernameJTextField.setPreferredSize(new Dimension(50, 100));
loginJPanel.add(usernameJTextField);
答案 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);