Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel出现在JMenuBar后面_Java_Swing_Graphics - Fatal编程技术网

Java JPanel出现在JMenuBar后面

Java JPanel出现在JMenuBar后面,java,swing,graphics,Java,Swing,Graphics,此代码导致字符串出现在JMenuBar后面。要查看字符串,必须在(0,10)处绘制它。我相信这一定很简单,你们有什么想法吗?试试看 import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; @SuppressWarnings("serial") public class Main extends JFrame { fin

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

试试看

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);
    }
}
如中的图表所示

附录:@RaviG也是对的。

试试看

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);
    }
}
如中的图表所示


附录:@RaviG也是对的。

您还没有将画布添加到框架中

在构造器中,最后


添加
getContentPane().add(画布)

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

在构造器中,最后


添加
getContentPane().add(画布)

Gah!我从来没有想过要成为基线的坐标非常感谢!我必须经常参考那个图表。:-)啊!我从来没有想过要成为基线的坐标非常感谢!我必须经常参考那个图表。:-)抱歉,这是我发布的代码中的一个小问题。你看,在发布代码之前,我对代码进行了修改,在这个过程中我删除了某些部分,当我提出这个问题时,忘记了将它们重新添加进去。垃圾神的解决方案是正确的。对不起,这只是我发布的代码中的一个小问题。你看,在发布代码之前,我对代码进行了修改,在这个过程中我删除了某些部分,当我提出这个问题时,忘记了将它们重新添加进去。垃圾神的解决方案是正确的。顺便说一句,这不是你做定制绘画的方式。自定义绘制是通过重写paintComponent()方法而不是paint()方法来完成的。您应该调用super.paintComponent(…)以确保重新绘制背景。顺便说一下,这不是自定义绘制的方式。自定义绘制是通过重写paintComponent()方法而不是paint()方法来完成的。您应该调用super.paintComponent(…)以确保重新绘制背景。