为什么我的JFrame内容无法正确显示?

kno*_*erg 3 java swing jframe

为了减少代码,我正在取出与问题无关的代码,例如addActionListener();等.

我的主要课程是 public class TF2_Account_Chief

我有我的主要Jframe f;内容:

private static JFrame f = new JFrame("TF2 Account C.H.I.E.F.");
private JLabel runnableTogetherLabel = new JLabel("How many idlers would you like to run at a time?");
private static JTextField runnableTogetherInput = new JTextField();
private JButton runButton = new JButton("Run!");
private JButton stopButton = new JButton("Stop!");
private JButton resetButton = new JButton("Reset!");
private JButton exitButton = new JButton("Exit!");
Run Code Online (Sandbox Code Playgroud)

我设置了所有内容的属性:

    public void launchFrame() {
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
        f.add(runnableTogetherInput);
        f.add(runnableTogetherLabel);
        f.add(runButton);
        f.add(stopButton);
        f.add(resetButton);
        f.add(exitButton);
        f.setSize(625, 500);
        runnableTogetherInput.setSize(35, 20);
        runnableTogetherLabel.setSize(275, 25);
        runButton.setSize(60, 25);
        stopButton.setSize(65, 25);
        resetButton.setSize(70, 25);
        exitButton.setSize(60, 25);
        f.setLocation(0, 0);
        runnableTogetherInput.setLocation(285, 3);
        runnableTogetherLabel.setLocation(5, 0);
        runButton.setLocation(330, 0);
        stopButton.setLocation(395, 0);
        resetButton.setLocation(465, 0);
        exitButton.setLocation(540, 0);
    }
Run Code Online (Sandbox Code Playgroud)

然后我有我的main()方法:

public static void main(String[] args) throws IOException {
    TF2_Account_Chief gui = new TF2_Account_Chief();
    gui.launchFrame();
    Container contentPane = f.getContentPane();
    contentPane.add(new TF2_Account_Chief());
}
Run Code Online (Sandbox Code Playgroud)

然后我有我的第二个JFrame iF没有正确显示内容:

private void invalidInput() {
    JFrame iF = new JFrame("Invalid Input!");
    JLabel iL = new JLabel("The input you have entered is invalid!");
    JButton iB = new JButton("Exit!");
    Container contentPane2 = iF.getContentPane();
    contentPane2.add(new TF2_Account_Chief());
    iF.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    iF.pack();
    iF.setVisible(true);
    iF.add(iL);
    iF.add(iB);
    iF.setSize(500, 300);
    iL.setSize(125, 25);
    iB.setSize(60, 25);
    iF.setLocation(0, 0);
    iL.setLocation(0, 15);
    iB.setLocation(0, 45);
}
Run Code Online (Sandbox Code Playgroud)

现在,JFrame iFinvalidInput()调用方法时启动,但是您无法看到,因为该部分代码与问题无关.重要的是它的JFrame iF推出.

新框架如下所示: JFrame iF

关于为什么内容没有正确显示的任何想法?

(通过不正确,我的意思是JButton iB占据整个框架,框架是浅蓝色而不是正常的灰色.)

Bac*_*ash 9

您在不使用null布局的情况下使用绝对位置,这就是您看到一个大按钮的原因.

要查看每个组件,您必须使用

iF.setLayout(null);
Run Code Online (Sandbox Code Playgroud)

但这不是一个好习惯,我建议你学习如何使用Layouts并将所有工作留给布局管理器