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