将两个面板添加到JFrame

时间:2016-04-18 11:50:15

标签: java swing

我正在学习图形用户界面,并尝试将两个面板并排放置在一个框架中。没有给你我所有的代码(这是一个任务),任何人都可以给我任何指针,为什么下面的工作不起作用? (ControlPanel只是不显示)我按照教程,但看不到我出错的地方?

awakeFromNib

编辑:

其余代码:

    JFrame frame = new JFrame("Software");
    MainPanel m = new MainPanel();
    ControlPanel c = new ControlPanel(frame);

    frame.getContentPane().add(m, BorderLayout.WEST);
    frame.getContentPane().add(c, BorderLayout.EAST);



    public class MainPanel extends JPanel {

    .......

    public MainPanel(){
    super();
    setPreferredSize(new Dimension(WIDTH, HEIGHT));
    setFocusable(true);
    requestFocus();
    }
}

    public ControlPanel(JFrame frame) {
    super();
    setPreferredSize(new Dimension(WIDTH, HEIGHT));
    setFocusable(true);
    requestFocus();
    }
}

3 个答案:

答案 0 :(得分:4)

您需要将框架的布局设置为BorderLayout。

使用此:

frame.setlayout(new BorderLayout());

此外,如果您的框架被分成两个相等的一半,您也可以使用GridLayout。

frame.setLayout(new GrigLayout(1,2)); // If the panels are side-by-side.

frame.setLayout(new GrigLayout(2,1)); //If the panels are vertically adjacent.

答案 1 :(得分:4)

在您的代码中,您要使用JFrame的实例替换MainPanel的内容面板:

JFrame frame = new JFrame("Software");
    MainPanel m = new MainPanel();
    ControlPanel c = new ControlPanel(frame);
    frame.getContentPane().add(c, BorderLayout.WEST);
    frame.getContentPane().add(m, BorderLayout.EAST);
    frame.setLayout(new BorderLayout());// this has no use
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(m);// here the content pane becomes the MainPanel
    frame.pack();
    frame.setVisible(true);

因此,您已经在内容窗格中添加了内容,因此无需重置内容(同样,我将setLayout移至内容窗格,而不是JFrame

JFrame frame = new JFrame("Software");
    MainPanel m = new MainPanel();
    ControlPanel c = new ControlPanel(frame);
    frame.getContentPane().setLayout(new BorderLayout());
    frame.getContentPane().add(c, BorderLayout.WEST);
    frame.getContentPane().add(m, BorderLayout.EAST);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);

答案 2 :(得分:2)

检查

JFrame frame = new JFrame("Software");
    MainPanel m = new MainPanel();
    ControlPanel c = new ControlPanel(frame);
    //getContentPane layout to BorderLayout
    frame.getContentPane().setLayout(new BorderLayout());
    frame.getContentPane().add(c, BorderLayout.WEST);
    frame.getContentPane().add(m, BorderLayout.EAST);

    //you don't need it for now 
    //frame.setLayout(new BorderLayout());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //frame.setContentPane(m);
    frame.pack();
    frame.setVisible(true);

编辑:JFrame的ContentPane布局返回JFlowLayout,这就是为什么以下部分无法正常工作

.getContentPane().add(c, BorderLayout.WEST); 
frame.getContentPane().add(m, BorderLayout.EAST);