【问题标题】:Using paintComponent() to draw rectangle in JFrame使用paintComponent()在JFrame中绘制矩形
【发布时间】:2012-11-15 19:06:55
【问题描述】:

我正在尝试创建一个使用 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() 方法的底部(更具体地说,将它添加到面板后移动它框架)已经解决了这个问题。谢谢你。

【问题讨论】:

  • 没有必要用答案更新您的问题。表示“已解决”的最佳方式是选中最有用的答案旁边的复选标记。您还可以对任何对您有帮助的答案投票。

标签: java swing jframe jpanel paintcomponent


【解决方案1】:

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

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

frame.add(panel);

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

【讨论】:

  • 发现 - 添加 frame.add(panel) 后,矩形不会显示。真正的诀窍是 frame.setVisible(true) 提示。现在都在工作。类现在也从 main 方法中删除(这是我错误地忽略的)。非常感谢!
【解决方案2】:

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

frame.getContentPane().add( panel );

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

【讨论】:

  • 这很奇怪,这是我错误地忽略了 - 现在已修复。我尝试添加 frame.getContentPane().add(panel),它和 frame.add(panel) 一样有效。谢谢!
  • 我相信如果您查看 jframe 中的源代码,无论如何添加调用 getcontentpane.add。我认为 jframe 上的 add 方法是为了与 awt 框架兼容吗? (别忘了将答案标记为正确!)
猜你喜欢
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多