3

为了减少代码,我将与问题无关的代码取出,例如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!");

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

    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);
    }

然后我有我的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());
}

然后我的第二个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);
}

现在,在调用方法JFrame iF时启动invalidInput(),但您看不到,因为那部分代码与问题无关。重要的JFrame iF是启动。

新框架如下所示:JFrame iF

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

(不恰当地,我的意思是JButton iB占据了整个框架,框架是浅蓝色而不是普通的灰色。)

4

2 回答 2

9

您正在使用绝对位置而不使用null布局,这就是您看到一个大按钮的原因。

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

iF.setLayout(null);

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

于 2013-07-05T10:57:25.343 回答
3

The default layout of JFrame is BorderLayout, in which there are "5" locations you can put your components to

  1. CENTER
  2. PAGE_START
  3. PAGE_END
  4. LINE_START
  5. LINE_END

So, iF.add(component) will add the component to the CENTER, you can specify the location like this:

iF.add(component, BorderLayout.PAGE_END);
//You can also put  PAGE_START, LINE_START, LINE_END, CENTER

Take my advice and read more about BorderLayout, because if you refuse to learn Layout Managers, you probably go to Absolute Positioning( null layout) which is not a good way and must not be used.

于 2013-07-05T11:03:59.073 回答