Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用LayoutManager使文本字段大小正常_Java_Swing_Awt_Layout Manager - Fatal编程技术网

Java 使用LayoutManager使文本字段大小正常

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

在上图中,这就是我的GUI的样子,我在修复textfield时遇到了一个问题,因为它在我的框架中占用了大部分空间,我想纠正我的错误。 我知道布局管理器是个麻烦事,但有人知道我如何缩小文本字段,使我的框架看起来更好吗

我使用jpanels来保存我的大部分组件

这是我代码的必要部分

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对我最后一点问题的评论,他提供了一个极好的链接,提供了更多信息。