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