Java 使用LayoutManager使文本字段大小正常
在上图中,这就是我的GUI的样子,我在修复textfield时遇到了一个问题,因为它在我的框架中占用了大部分空间,我想纠正我的错误。 我知道布局管理器是个麻烦事,但有人知道我如何缩小文本字段,使我的框架看起来更好吗 我使用jpanels来保存我的大部分组件 这是我代码的必要部分Java 使用LayoutManager使文本字段大小正常,java,swing,awt,layout-manager,Java,Swing,Awt,Layout Manager,在上图中,这就是我的GUI的样子,我在修复textfield时遇到了一个问题,因为它在我的框架中占用了大部分空间,我想纠正我的错误。 我知道布局管理器是个麻烦事,但有人知道我如何缩小文本字段,使我的框架看起来更好吗 我使用jpanels来保存我的大部分组件 这是我代码的必要部分 panel1 = new JPanel(); panel1.setLayout(new GridLayout()); frame.getContentPane().add(panel1, BorderLa
panel1 = new JPanel();
panel1.setLayout(new GridLayout());
frame.getContentPane().add(panel1, BorderLayout.NORTH);
label2 = new JLabel("Score: " + score);
label2.setFont(new Font("SimSun", Font.BOLD, 22));
label2.setLocation(0,0);
label2.setSize(117,37);
panel1.add(label2);
label3 = new JLabel("Lives: " + lives);
label3.setFont(new Font("SimSun", Font.BOLD, 22));
label3.setLocation(0,70);
label3.setSize(105,49);
panel1.add(label3);
panel2 = new JPanel();
panel2.setLayout(new BorderLayout());
frame.getContentPane().add(panel2, BorderLayout.CENTER);
label1 = new JLabel(a +" + " +b);
label1.setFont(new Font("SimSun", Font.BOLD, 22));
label1.setHorizontalAlignment(SwingConstants.CENTER);
Border paddingBorder = BorderFactory.createEmptyBorder(10,10,10,10);
label1.setBorder(BorderFactory.createCompoundBorder(null,paddingBorder));
label1.setLocation(249,105);
label1.setSize(183,60);
panel2.add(label1, BorderLayout.NORTH);
box1 = new JTextField();
box1.setPreferredSize(new Dimension(50, 50));
box1.setLocation(249,176);
box1.setSize(96,25);
panel2.add(box1, BorderLayout.CENTER);
panel3 = new JPanel();
panel3.setLayout(new GridLayout());
frame.getContentPane().add(panel3, BorderLayout.SOUTH);
button1 = new JButton("Answer");
panel3.add(button1);
button1.addActionListener(this);
button1.setLocation(187,236);
button1.setSize(105,50);
button2 = new JButton("Reset");
panel3.add(button2);
button2.addActionListener(this);
button2.setVisible(false);
button2.setLocation(302,236);
button2.setSize(105,50);
原因是您正在将JTextField添加到
BorderLayout.CENTER
,这将扩展它以填充此特定布局管理器可用的所有空间。尽管我不确定您希望GUI的外观如何,可能是一个简单的FlowLayout
(默认布局)或一个BoxLayout
,再加上setAlignmentX(Component.CENTER\u对齐)将解决您的问题
您可以在此处找到有关布局的更多信息:
此外,请注意,您不应该使用诸如setLocation()
之类的方法,因为布局管理器的目的是允许它选择组件在屏幕上的布局方式,因此布局管理器可能会忽略这一点以及setSize
1)参见(是)2)如需更好的帮助,请尽快发布(最小完整可验证示例)或(简短、完整、正确的示例)。3)作为紧急措施,在添加所有组件后调用frame.pack()
。。。。4) BorderFactory.createCompoundBorder(null,paddingBorder)
它的“短”版本是paddingBorder
。另外请注意Andrew Thompson对我最后一点问题的评论,他提供了一个极好的链接,提供了更多信息。