我希望我的 Jpanel 位于我的工具栏下方,但结果将是我的 jpanel 没有出现,如果我也让我的 JPanel 具有页面开始的边框布局,则 JFrame 将只显示 JPanel 而不是我的工具栏。 这是我的代码
package omok;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import java.util.*;
import javax.swing.*;
public class Omok implements ActionListener {
JFrame frame =new JFrame();
public Omok() {
JMenuBar menuBar=menubar();
JToolBar toolBar=toolBar();
JPanel panel=panel();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,500);
frame.getContentPane().setBackground(Color.ORANGE);
frame.setLayout(new BorderLayout());
frame.setJMenuBar(menuBar);
frame.add(toolBar,BorderLayout.PAGE_START);
frame.add(panel,BorderLayout.NORTH);
frame.pack();
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
private JMenuBar menubar() {
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Game");
menu.setMnemonic(KeyEvent.VK_G);
menu.getAccessibleContext().setAccessibleDescription("Game menu");
menuBar.add(menu);
JMenuItem menuItem = new JMenuItem("Play", KeyEvent.VK_P);
menuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_P, InputEvent.ALT_DOWN_MASK));
menuItem.getAccessibleContext().setAccessibleDescription(
"Play a new game");
//menuItem.addActionListener(…);
menu.add(menuItem);
return menuBar;
}
private JToolBar toolBar() {
ImageIcon icon=new ImageIcon("C:\\Users\\carlo\\Documents\\Adv OO Programming\\L\\OmokGUI\\res\\play.png");
Image image=icon.getImage();
Image newImg=image.getScaledInstance(20, 20, Image.SCALE_SMOOTH);
icon=new ImageIcon(newImg);
JToolBar toolBar = new JToolBar("Omok");
JButton button = new JButton(icon);
button.setPreferredSize(new Dimension(20,20));
button.setToolTipText("Play a new game");
button.setFocusPainted(false);
toolBar.add(button);
toolBar.setPreferredSize(new Dimension(30,30));
return toolBar;
}
private JPanel panel() {
JPanel panel=new JPanel();
panel.setPreferredSize(new Dimension(40,40));
panel.setBackground(Color.gray);
return panel;
}
}
BorderLayout
JavaDocs 状态,"PAGE_START
... 这相当于 NORTH" - 所以你试图将两个组件放在同一位置,BorderLayout
将只允许一个组件存在于它的 5 个可用位置中的每一个。
如果您希望两个组件都处于
NORTH
位置,那么您需要使用另一个容器(如JPanel
)将它们放入并将该容器放入NORTH
位置。
这通常被称为复合布局。