Java - JTextField 填充所有框架
Java - JTextField fills all frame
我正在尝试完成一个非常简单的任务:制作一个不会填满所有屏幕的 JTextField。目前我看到这只能通过 setMaximumSize 实现,还有其他方法吗?这是我的代码:
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
window.setSize(screenSize.width / 2, screenSize.height / 2);
window.setLocation(screenSize.width / 4, screenSize.height / 4);
window.setResizable(false);
JPanel pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.PAGE_AXIS));
pane.setBorder(new EmptyBorder(10, 10, 10, 10));
pane.add(new JTextField(10));
window.setContentPane(pane);
使用 GridBagLayout
这将为您提供一种在屏幕的每个组件中设置约束的方法。
问题来自BoxLayout
:
For a top-to-bottom box layout, the preferred width of the container is that of the maximum preferred width of the children. If the container is forced to be wider than that, BoxLayout
attempts to size the width of each component to that of the container's width (minus insets). If the maximum size of a component is smaller than the width of the container, then X alignment comes into play.
(强调我的)。因此,正如您所提到的,您对 BoxLayout
的选择是设置最大尺寸(然后在需要时处理对齐):
JTextField textField = new JTextField(10);
textField.setMaximumSize(textField.getPreferredSize());
textField.setAlignmentX(Component.LEFT_ALIGNMENT); // If needed
否则,您将不得不使用不同的 LayoutManager
。很多事情都有效。对于初学者,只需删除行
pane.setLayout(new BoxLayout(pane, BoxLayout.PAGE_AXIS));
使用默认 FlowLayout
。
请注意,如果您将更多组件放入框架中,则可能会出现此问题 "fix itself",因为其他组件可能会被调整大小。
我正在尝试完成一个非常简单的任务:制作一个不会填满所有屏幕的 JTextField。目前我看到这只能通过 setMaximumSize 实现,还有其他方法吗?这是我的代码:
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
window.setSize(screenSize.width / 2, screenSize.height / 2);
window.setLocation(screenSize.width / 4, screenSize.height / 4);
window.setResizable(false);
JPanel pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.PAGE_AXIS));
pane.setBorder(new EmptyBorder(10, 10, 10, 10));
pane.add(new JTextField(10));
window.setContentPane(pane);
使用 GridBagLayout
这将为您提供一种在屏幕的每个组件中设置约束的方法。
问题来自BoxLayout
:
For a top-to-bottom box layout, the preferred width of the container is that of the maximum preferred width of the children. If the container is forced to be wider than that,
BoxLayout
attempts to size the width of each component to that of the container's width (minus insets). If the maximum size of a component is smaller than the width of the container, then X alignment comes into play.
(强调我的)。因此,正如您所提到的,您对 BoxLayout
的选择是设置最大尺寸(然后在需要时处理对齐):
JTextField textField = new JTextField(10);
textField.setMaximumSize(textField.getPreferredSize());
textField.setAlignmentX(Component.LEFT_ALIGNMENT); // If needed
否则,您将不得不使用不同的 LayoutManager
。很多事情都有效。对于初学者,只需删除行
pane.setLayout(new BoxLayout(pane, BoxLayout.PAGE_AXIS));
使用默认 FlowLayout
。
请注意,如果您将更多组件放入框架中,则可能会出现此问题 "fix itself",因为其他组件可能会被调整大小。