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

时间:2013-07-09 22:28:32

标签: java swing jframe jpanel paintcomponent

我试图在JPanel上画画时遇到困难。我已经学会了如何创建JFrameJPanel,添加事件处理程序,在applet中执行相同的操作以及其他一些基本的GUI开发。但每当我尝试使用JPanelpaintComponent(Graphics g)方法绘制paint(Graphics g)时,都不会显示任何内容。按钮以及其他JComponents显示得很好。但g.drawStringg.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)
    }
}

1 个答案:

答案 0 :(得分:6)

您添加到JPanel的{​​{1}}是一个普通的JFrame,而不是JPanel的实例,您的自定义类包含Game } 方法。你需要改变那一行

paintComponent()

你应该立即看到差异!

除了调用JPanel panel = new Game(); 方法之外,您在Game中创建的main()实例并未用于任何内容。如果你愿意,可以使用它来代替:

game()

然后继续前进。