Java 使用paintComponent()在JFrame中绘制矩形

Java 使用paintComponent()在JFrame中绘制矩形,java,swing,jframe,jpanel,paintcomponent,Java,Swing,Jframe,Jpanel,Paintcomponent,我试图创建一个程序,使用JPanel的paintComponent()绘制形状(下例中的矩形),但我无法让它工作,也无法发现错误 代码如下: import javax.swing.*; import java.awt.*; public class RandomRec{ JFrame frame; public void go(){ frame = new JFrame(); frame.setSize(500,500); fr

我试图创建一个程序,使用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(面板)并将frame.setVisible(true)移动到go()方法的底部(更具体地说,在面板添加到框架后移动它)已解决问题。多谢各位

您的类
DrawPanel
被限制在
main
方法的范围内,并且对构造函数不可见

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

frame.add(panel);

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

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

frame.getContentPane().add( panel );

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

这太奇怪了,我错误地忽略了这一点-现在修复了。我尝试添加frame.getContentPane().add(面板),它与frame.add(面板)一样工作。谢谢我相信如果您查看jframe中的源代码,仍然可以添加getcontentpane.add调用。我认为jframe上的add方法是为了与awt frame兼容吗?(别忘了将答案标记为正确!)添加frame.add(panel)后,矩形不会出现。真正的诀窍是frame.setVisible(true)提示。现在都在工作。类现在也从主方法中删除(这是我错误地忽略的)。非常感谢!没有必要用答案更新你的问题。表示“已解决”的最佳方法是选中最有用答案旁边的复选标记。你也可以投票选出任何对你有帮助的答案。