3

所以我有这个问题。我在 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);

    }
4

1 回答 1

4

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

于 2013-03-09T16:58:54.073 回答