我正在尝试修改GUI。它正在托管显示JOGL内容的GLCanvas。
以下是设置它的代码:
private void setupWindow() {
this.frame = new JFrame(WINDOW_TITLE);
frame.setSize(width, height);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("File");
menuBar.add(menu);
JMenuItem exitItem = new JMenuItem("Exit");
exitItem.addActionListener(listener);
menu.add(exitItem);
frame.setJMenuBar(menuBar);
}
目前,除菜单栏外,画布占据了窗口中的整个空间。我想为窗口中的其他控件腾出空间,比如按钮和列表框。我该怎么办?
我尝试插入以下内容,但它不起作用:
private void setupWindow() {
this.frame = new JFrame(WINDOW_TITLE);
frame.setSize(width, height);
// ** inserted the following:
JPanel canvasPanel = new JPanel(new BorderLayout());
canvasPanel.add(canvas);
canvasPanel.setSize(30, 40);
canvasPanel.setVisible(true);
// **
frame.add(canvasPanel);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("File");
menuBar.add(menu);
JMenuItem exitItem = new JMenuItem("Exit");
exitItem.addActionListener(listener);
menu.add(exitItem);
frame.setJMenuBar(menuBar);
}
这根本不会修改窗口的外观。
我应该在这做什么?我对Java GUI不太熟悉。
更新:将构造函数的参数从BorderLayout
更改为FlowLayout
会导致GLCanvas消失。
答案 0 :(得分:1)
Per Anon的回答,你真的需要更好地理解布局管理器。你的问题太开放了。
如果这有助于:
JPanel canvasPanel = new JPanel(new BorderLayout());
frame.add(canvasPanel, BorderLayout.CENTER);
canvasPanel.add(canvas);
Box leftBtnsBox = Box.createVerticalBox();
frame.add(leftBtns, BorderLayout.WEST);
leftBtns.add(new JButton("Button 1"));
leftBtns.add(new JButton("Button 2"));
此代码显式设置BordeLayout,但我认为面板(和内容窗格)的默认布局管理器是BorderLayout。此代码将两个按钮放在垂直排列的画布面板的左上角。因为您正在使用这些布局管理器,所以您的第二个代码示例的setSize没有任何效果。
答案 1 :(得分:0)
我建议您向布局管理员查看this guide - 它会为您提供足够的信息以了解您应该尝试的内容。