Java swing - 错误的大小

时间:2013-03-09 16:57:11

标签: java swing layout size

所以我有这个问题。我在Java Eclipse SDK 4.2.1中编写了这段代码。我没有在这里写完所有,actionPerformed方法现在无关紧要,它从Main调用一次。问题是有时当我运行它时,其中一个组件只填充整个窗口并重叠所有其他组件。我尝试通过随机数改变大小,例如从400到350,有时它工作,然后再次破坏。我可能错过了一些东西,我只是不知道是什么。我搜索过其他论坛,却一无所获。

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collections;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;


public class Window extends JFrame implements ActionListener
{
    JTextField field1;
    JTextField field2;

    public Window()
    {
        super("Main Window");
        setVisible(true);
        setSize(500, 500);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Initialize();
    }
    private void Initialize()
    {
        field1 = new JTextField();
        field2 = new JTextField();
        field1.setBounds(0, 0, 400, 100);
        field2.setBounds(0,100,400,100);
        add(field1);
        add(field2);
        field1.setBackground(Color.PINK);
        field1.setForeground(Color.RED);
        field2.setBackground(Color.PINK);
        field2.setForeground(Color.RED);
        JButton button = new JButton("Create");
        button.setBounds(0, 200, 400, 100);
        add(button);
        button.setBackground(Color.BLACK);
        button.setForeground(Color.YELLOW);
        button.addActionListener(this);

    }

1 个答案:

答案 0 :(得分:4)

您的问题是您的代码不尊重正在使用的布局管理器,因为您尝试添加组件,就好像正在使用的布局为空时实际上不是。解决方案是阅读并了解布局管理器,并使用它们;这包括避免调用setBounds(...)。请注意,默认情况下,JFrame的contentPane使用BorderLayout。这些信息可以帮助您入门。另请注意, 错误的 解决方案是使用null布局。所以,如果有人建议这样做,我建议你忽略它们。