2添加到Frame的面板是一个在另一个之上

时间:2014-04-21 16:31:53

标签: java border-layout

我正在尝试将JPanel添加到JFrame,但第二个只是在第一个上面,我似乎无法理解为什么或如何解决它。

以下是我尝试添加的用户界面。 非常感谢,

Rotem公司

private static void createAndShowGUI() {
    JFrame f = new JFrame("Maman 13 - Part 2");
    f.setLayout(new BorderLayout());
    //f.setResizable(false);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    FlowLayout alignLeftLayout = new FlowLayout(FlowLayout.LEFT, 5, 5);
    // first row
    Hashtable<Integer, JButton> hashTable = new Hashtable<Integer, JButton>();
    LinkedHashMap<String, Integer> buttons = new LinkedHashMap<String, Integer>();
    addFirstRow(buttons);
    JPanel firstRow = new KeyboardRow(hashTable, buttons);
    firstRow.setLayout(alignLeftLayout);
    f.add(firstRow);
    // second row
    buttons = new LinkedHashMap<String, Integer>();
    addSecondRow(buttons);
    JPanel secondRow = new KeyboardRow(hashTable, buttons);
    secondRow.setLayout(alignLeftLayout);
    f.add(secondRow);

    f.pack();
    f.setVisible(true);
}

3 个答案:

答案 0 :(得分:1)

而不是

f.setLayout(new BorderLayout());

f.setLayout(new GridLayout());

答案 1 :(得分:0)

我认为你需要像

那样
f.add(firstRow, BorderLayout.WEST)

f.add(secondRow, BorderLayout.EAST)

或类似的东西。您没有指定如何使用您添加的BorderLayout方案。

答案 2 :(得分:0)

尝试使用以下内容替换你的f.add([something]);线。

f.add(firstRow, BorderPanel.LINE_START);
f.add(secondRow, BorderPanel.LINE_END);

这应该将firstRow面板放在左边,将secondRow面板放在右边。

这是有效的,因为BorderLayout最多可以容纳五个面板,如下所述: http://docs.oracle.com/javase/7/docs/api/java/awt/BorderLayout.html

您现有的代码只是将新面板添加到f,而没有指定应该去哪里。