JPanel出现在JMenuBar背后

时间:2010-05-18 23:06:48

标签: java swing graphics

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

@SuppressWarnings("serial")
public class Main extends JFrame {

    final int FRAME_HEIGHT = 400;
    final int FRAME_WIDTH = 400;

    public static void main(String args[]) {
        new Main();
    }

    public Main() {
        super("Game");

        GameCanvas canvas = new GameCanvas();

        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenuItem startMenuItem = new JMenuItem("Pause");
        menuBar.add(fileMenu);
        fileMenu.add(startMenuItem);

        getContentPane().add(canvas);
        super.setVisible(true);
        super.setSize(FRAME_WIDTH, FRAME_WIDTH);
        super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        super.setJMenuBar(menuBar);
    }
}


import java.awt.Canvas;
import java.awt.Graphics;

import javax.swing.JPanel;

@SuppressWarnings("serial")
public class GameCanvas extends JPanel {

    public void paint(Graphics g) {
        g.drawString("hI", 0, 0);
    }
}

此代码导致字符串出现在JMenuBar后面。要查看字符串,必须在(0,10)处绘制它。我确定这一定很简单,你们有什么想法吗?

2 个答案:

答案 0 :(得分:3)

尝试

FontMetrics fm = g.getFontMetrics();
g.drawString("hI", 10, fm.getMaxAscent());

,如FontMetrics中的图表所示。

附录:@RaviG也是对的。

答案 1 :(得分:2)

您尚未将画布添加到框架中。

在你的构造函数中,最后,

添加getContentPane().add(canvas);