5

我正在尝试使用 JPanel 的 paintComponent() 创建一个绘制形状(下例中的矩形)的程序,但我无法让它工作,也无法发现问题所在。

代码如下:

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

public class RandomRec{
    JFrame frame;

    public void go(){
        frame = new JFrame();
        frame.setSize(500,500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        DrawPanel panel = new DrawPanel();
    }

    public static void main (String[] args){
        class DrawPanel extends JPanel{
           public void paintComponent(Graphics g) {
              super.paintComponent(g);
              g.setColor(Color.orange);
              g.drawRect(20, 20, 100, 60);
           }
        }

        RandomRec test = new RandomRec();
        test.go();
    }
}

对此的任何帮助将不胜感激。

谢谢你。

*更新*问题解决了!将 go() 方法移出 main 方法,添加一个 frame.add(panel) 并将 frame.setVisible(true) 移动到 go() 方法的底部(更具体地说,在将面板添加到框架)已经解决了这个问题。谢谢你。

4

2 回答 2

4

您的类DrawPanel仅限于您的main方法的范围,并且对您的构造函数不可见。

您需要DrawPanel移出您的main方法,然后将其添加到您的JFrame

frame.add(panel);

frame.setVisible(true)此外,最好在添加所有组件后调用。

于 2012-11-15T19:08:20.513 回答
2

您实际上从未将面板添加到框架中,因此它永远不可见。你需要类似的东西

frame.getContentPane().add( panel );

为什么要在 main 方法中定义 drawpanel 类?这很奇怪。

于 2012-11-15T19:09:29.993 回答