我正在学习图形用户界面,并尝试将两个面板并排放置在一个框架中。没有给你我所有的代码(这是一个任务),任何人都可以给我任何指针,为什么下面的工作不起作用? (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();
}
}
答案 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);