Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将两个面板添加到JFrame_Java_Swing - Fatal编程技术网

Java 将两个面板添加到JFrame

Java 将两个面板添加到JFrame,java,swing,Java,Swing,我正在学习GUI,并尝试将两个面板并排放置在一个框架中。在不给你我所有的代码的情况下,这是一个作业,有人能给我一些关于为什么下面的代码不起作用的建议吗?控制面板只是没有显示我按照教程,但看不出哪里出了问题 JFrame frame = new JFrame("Software"); MainPanel m = new MainPanel(); ControlPanel c = new ControlPanel(frame); frame.getContentPa

我正在学习GUI,并尝试将两个面板并排放置在一个框架中。在不给你我所有的代码的情况下,这是一个作业,有人能给我一些关于为什么下面的代码不起作用的建议吗?控制面板只是没有显示我按照教程,但看不出哪里出了问题

    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();
    }
}
编辑:

代码的其余部分:

    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());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(m);
    frame.pack();
    frame.setVisible(true);

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

使用以下命令:

frame.setlayout(new BorderLayout());
此外,如果您的框架被分成正好相等的两部分,您也可以使用GridLayout

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


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

因此,由于您已经向内容窗格中添加了内容,因此无需重置它。我将setLayout移到了内容窗格中,而不是JFrame

检查这个

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

你使用哪种布局?你的意思是像边框布局等?我仅有的布局如上所述,然后我在控制面板中使用boxlayout来布局一些按钮setLayoutnew boxlayout这是boxlayout.Y_轴;我认为这是我需要从上面获取的唯一布局:frame.getContentPane.addm,BorderLayout.WEST;frame.getContentPane.addc,BorderLayout.EAST;这就是问题所在:frame.setContentPanem;-您刚刚替换了包含c和m的内容窗格。注意:框架一分为二,JSplitPaneJSplitPane.HORIZONTAL_SPLIT,a,b很好…谢谢@Hackerdashi,但仍然不起作用:将在上面复制更多代码…明白了,基于此,下面的答案-非常感谢!谢谢@Berger!这导致了我的另一个问题……我的主面板接受键盘输入。这现在不起作用:这可能是因为我请求主面板和控制面板的焦点吗?@javapalava:你能用一些细节编辑你的问题,或者发布另一个有这个问题的问题吗?当然:我只是先浏览一下网页,看看我自己能不能弄清楚,然后再转向这个问题!
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);
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);
.getContentPane().add(c, BorderLayout.WEST); 
frame.getContentPane().add(m, BorderLayout.EAST);