Java JPanels在Frame中不可见

时间:2014-04-16 23:16:09

标签: java swing jframe jpanel

有人可以解释为什么我的框架只显示p2而不显示p1吗?

这经常发生在我身上,我知道我错过了什么。

public class Exercise_16_4 extends JFrame {

private static final long serialVersionUID = 1L;

    JLabel[] labels = new JLabel[3];
    JTextField[] textFields = new JTextField[3];
    JButton[] buttons = new JButton[4];
    String[] buttonText = {"Add", "Subtract", "Multiply", "Divide"};
    String[] labelText = {"Number 1", "Number 2", "Result"};
    JPanel p1 = new JPanel();
    JPanel p2 = new JPanel();

    public Exercise_16_4() {
        for (int i = 0; i < labels.length; i++) {
            labels[i] = new JLabel(labelText[i]);
            textFields[i] = new JTextField();
            p1.add(labels[i]);
            p1.add(textFields[i]);
        }

        for (int i = 0; i < buttons.length; i++) {
            buttons[i] = new JButton(buttonText[i]);
            p2.add(buttons[i]);
        }

        add(p1);
        add(p2);
    }

    public static void main(String[] args) {
        Exercise_16_4 frame = new Exercise_16_4();
        frame.setTitle("Exercise 16.4");
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
}//main
}//class

1 个答案:

答案 0 :(得分:5)

JFrame内容窗格的默认布局管理器是BorderLayout。

默认情况下,当您向框架添加组件时,将添加到BorderLayout的CENTER中。问题是只能添加一个组件,因此只显示添加的最后一个组件。

您可以尝试以下内容:

add(p1, BorderLayout.NORTH);

或者您可以创建一个JPanel,将p1,p2组件添加到面板,然后将面板添加到框架中。

阅读Layout Managers上Swing教程中的部分,了解有关使用布局管理器的更多信息和示例,以及向您展示如何在Event Dispatch Thread上创建GUI的示例。