Java - paintComponent不会在JPanel上显示绘图

Ahm*_*fik 2 java swing jpanel jframe paintcomponent

我已经卡住试图画上一个JPanel.我已经学会了如何创建a JFrame,a JPanel,添加事件处理程序,在applet中执行相同的操作以及其他一些基本的GUI开发.但每当我尝试JPanel使用paintComponent(Graphics g)paint(Graphics g)方法时,都没有显示出来.按钮,以及其他JComponents,显示就好了.但是g.drawString,g.drawRect等等导致一个空白的JFrame窗口.

这是我的代码:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;

public class Game extends JPanel {
    public static void main(String[] args) {
        new Game().game();
    }

    JPanel panel;
    JButton button2;
    JButton button;

    public void game() {
        panel = new JPanel();
        button = new JButton("Ok");
        panel.setLayout(new FlowLayout());
        panel.add(button);

        button2 = new JButton("Cancel");

        JFrame frame = new JFrame("Game");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500,500);
        frame.setResizable(false);
        frame.add(panel);

        frame.setVisible(true); 
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawString("hi",100,100);
        g.fillRect(100,50,200,300)
    }
}
Run Code Online (Sandbox Code Playgroud)

Ern*_*ill 6

JPanel您要添加到您的JFrame是一个普通的JPanel,而不是一个实例Game包含,自定义类paintComponent()方法.你需要改变那一行

JPanel panel = new Game();
Run Code Online (Sandbox Code Playgroud)

你应该马上看到差异!

除了调用方法之外,Game您创建的实例main()不会用于任何内容game().你可以使用它,如果你愿意,可以这样做:

JPanel panel = this;
Run Code Online (Sandbox Code Playgroud)

然后像以前一样继续