Java 使用自定义JPanel,但使用编辑器移动它

Java 使用自定义JPanel,但使用编辑器移动它,java,eclipse,swing,windowbuilder,Java,Eclipse,Swing,Windowbuilder,我试图在JavaSwing应用程序上绘制一些自定义图形,但在使用自定义JPanel类和图形编辑器时遇到了问题 现在我正在使用WindowBuilderPro(一个Eclipse插件) 问题是,如果我将JPanel作为JPanel的子类进行实例化,我就无法在图形编辑器中看到我的JPanel(也无法编辑它的任何属性)。以下是代码的相关部分: JPanel panel = new CustomPanel(); panel.setBounds(...); frmApplication.getConten

我试图在JavaSwing应用程序上绘制一些自定义图形,但在使用自定义JPanel类和图形编辑器时遇到了问题

现在我正在使用WindowBuilderPro(一个Eclipse插件)

问题是,如果我将JPanel作为JPanel的子类进行实例化,我就无法在图形编辑器中看到我的JPanel(也无法编辑它的任何属性)。以下是代码的相关部分:

JPanel panel = new CustomPanel();
panel.setBounds(...);
frmApplication.getContentPane().add(panel);
上述方法不起作用,但如果我这样做:

JPanel panel = new JPanel();
panel.setBounds(...);
frmApplication.getContentPane().add(panel);
不要使用我的自定义类,那么它工作得很好,但当然我不能绘制任何自定义图形。我该如何解决这个问题

编辑


我刚刚意识到代码生成器无法解释自定义JPanel,因为它是一个内部类。将它作为一个单独的类解决了我的问题。

您的CustomPanel应该继承自JPanel

主要是:

CustomPanel panel = new CustomPanel();

JPanel
上进行自定义绘制的步骤。请使用
CustomPanel
类进行验证

  • 重写
    paintComponent()
    方法
  • 始终调用
    super.paintComponent(g)内部重写
    paintComponent
    方法
请查看,了解有关执行自定义绘制的深入讨论

示例代码:

class CustomJPanel extends JPanel {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.RED);
        g.drawString("Hello", 10, 10);
        g.fillRect(20, 20, 50, 50);
    }
}

JPanel panel = new CustomJPanel();
frame.getContentPane().add(panel);
截图:


为什么您的CostumPanel无法正常工作?你会得到什么错误?没有错误,它根本不会显示在图形编辑器中。当然,它是在运行应用程序时显示的。好吧,我在编写整个代码时才意识到这个问题。生成器无法检测内部类…哦,不,这是一个多么愚蠢的错误。他声明他的CustomPanel类已经从JPanel扩展。他的代码没有抛出NPE,所以你的答案没有回答这个问题。谢谢你的时间,但我已经在我的代码中这样做了。很高兴知道我做得很好。实际上,您只需要从上的Swing教程开始学习基础知识(例如,也可以覆盖getPreferredSize()以返回面板的大小)。另一个教程更具技术性,对解决这个问题没有帮助。