java - JFrame 背景覆盖菜单栏

标签 java swing background jframe jmenu

每当我向 JFrame 添加背景(图像 img)时,我都看不到我的菜单栏....任何帮助将不胜感激...我正在学习 JFrames,可能会忽略一些愚蠢的东西。

class GameFrame extends JFrame {

private JLabel statusbar;
Image img = new ImageIcon("splash.png").getImage();

public GameFrame() {
    initUI();
    menuUI();
    BackgroundLoader bg = new BackgroundLoader();
}

@Override
    public void paint(Graphics g) {
    try {
        Image img = ImageIO.read(new File("splash.png"));             
        g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);
    } catch (IOException e) {
        e.printStackTrace();
    }

}

public final void initUI() {
    setTitle("Super RPG Hero: The Quest for Fame and Fortune");
    setSize(800, 480);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    //JLabel background = new JLabel(splash);
    //background.setBounds(0, 0, splash.getIconWidth(), splash.getIconHeight());
    //getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));

}

public final void menuUI() {


    JMenuBar menubar = new JMenuBar();

    //Creates file menu item
    JMenu file = new JMenu("File");
    file.setMnemonic(KeyEvent.VK_F);

    //Creates Object for New Game toolbar
    JMenuItem newItem = new JMenuItem("New Game");
    newItem.setMnemonic(KeyEvent.VK_C);
    newItem.setToolTipText("New Game");
    newItem.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent event) {
            String playerName = "Peter";
            CharacterCreator characterOne = new CharacterCreator(playerName);
            characterOne.statBuilder();
        }
    });

    //Creates Object for Save Game toolbar
    JMenuItem saveItem = new JMenuItem("Save");
    saveItem.setMnemonic(KeyEvent.VK_C);
    saveItem.setToolTipText("Save Game");

    //Creates Object for Load Game toolbar
    JMenuItem loadItem = new JMenuItem("Load");
    loadItem.setMnemonic(KeyEvent.VK_C);
    loadItem.setToolTipText("Load Game");

    //Creates Object for Exit Game toolbar
    //And creates method for the game to exit
    JMenuItem exitItem = new JMenuItem("Exit");
    exitItem.setMnemonic(KeyEvent.VK_C);
    exitItem.setToolTipText("Exit Game");
    exitItem.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent event) {
            System.exit(0);
        }
    });

    //Adds created objects to GUI
    file.add(newItem);
    file.add(saveItem);
    file.add(loadItem);
    file.add(exitItem);
    menubar.add(file);

    setJMenuBar(menubar);

}

}

最佳答案

您应该实现 paintComponent() 而不是 paint()

通过覆盖绘制而不是委托(delegate),您不会让 JFrame 绘制它需要绘制的内容。

另外,看看这个 answer .

关于java - JFrame 背景覆盖菜单栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9473341/

相关文章:

java - 如何使用日历减去不同的时间单位

java - Swing ListCellRenderer 中的错误背景颜色

系统为后台音频应用程序提供的 iOS 通知

css - 在 ul 列表中使用 sprite 图像?

java - 无法从 Android Leanback 应用程序中的 VideoDetailsFragment 访问 getPackageManager GetActivityInfo

java - Guava 可选使用的快捷方式有异常(exception)吗?

java - 在 MVC 模型中存储什么以及组件如何通信?

background - Gnuplot 绘图区域背景

java - Spring Security——检索当前尝试登录的用户的用户名

java - 将 ButtonGroup 添加到 JPanel