为什么我的 JToolBar 和 JPanel 不能在同一个 JFrame 上共存

问题描述 投票:0回答:1

我希望我的 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;
}

}

这是我得到的结果 Result of my code

java jframe jpanel jtoolbar
1个回答
0
投票

作为

BorderLayout
JavaDocs 状态,"
PAGE_START
... 这相当于 NORTH"
- 所以你试图将两个组件放在同一位置,
BorderLayout
将只允许一个组件存在于它的 5 个可用位置中的每一个。

如果您希望两个组件都处于

NORTH
位置,那么您需要使用另一个容器(如
JPanel
)将它们放入并将该容器放入
NORTH
位置。

这通常被称为复合布局。

© www.soinside.com 2019 - 2024. All rights reserved.