Java Netbeans覆盖JPanel中的paint()方法

时间:2013-08-24 07:55:19

标签: java swing netbeans

嗨,我是新手程序员 我想使用Netbeans IDE开发Java程序的GUI

使用Netbeans GUI Builder,
首先,我创建一个新的JFrame表单
然后,我从工具栏/调色板

添加一个JPanel

问题是,
如何覆盖新创建的paint()的<{1}}函数?

我想在JPanel内画一个背景和一些球体,
我尝试使用JPanel函数进行绘制和绘制,它完成了工作,但是当我调用getGraphics()

时它不会再绘制了

我应该使用自定义repaint()功能创建一个实现JPanelJComponent的新类吗? (如果是这样,我怎样才能使用Netbeans GUI Builder?)

类似的问题:

  

how to use jpanel with paint (or repaint)

(但它不使用Netbeans GUI Builder)

3 个答案:

答案 0 :(得分:9)

通常的做法是创建自己的JPanel子类(例如MyJPanel)并在那里实施paint()方法。

实现该类后,切换到表单,选择面板,然后使用面板属性的“代码”选项卡中的“自定义创建代码”创建MyJPanel的实例,而不是{{ 1}}

Custom creation code

这有一点点缺点,即每次要访问JPanel中定义但MyJPanel中未定义的方法时,您需要将实例变量强制转换为MyJPanel。如果你永远不需要这样做,这是最快捷的方法。

如果要访问面板类中的其他方法(每次都不转换实例变量),则更容易删除现有的JPanel并使用新类添加“Bean”。

通过单击调色板中的“选择Bean”按钮来完成:

Choose bean

单击“确定”后,可以将面板放在表单上,​​NetBeans将创建类型为JPanel的实例变量(而不是JPane),您可以访问该类中定义的所有方法。 请注意,必须先编译该类才能以这种方式添加它!

答案 1 :(得分:7)

  

嗨,我是一名新手程序员,我想开发一个Java程序的GUI   使用Netbeans IDE

嗨! 由于您是一名新手程序员,因此将Netbeans用作常规文本编辑器。为了做到这一点,创建普通的Java类而不是Forms,并自己编写代码。原因是在必须处理Netbeans方法之前,您必须首先了解Swing。

  

我应该用my创建一个实现JPanel或JComponent的新类   自定义paint()函数,而不是?

您当然只能扩展JPanel或JComponent,因为它们不是接口。

如果您坚持使用Netbeans Mattise GUI编辑器,则创建一个新的JPanel表单并覆盖它的paintComponent方法。

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    // do your painting here...
    g.setColor(Color.RED);
    g.fillRect(6, 20, 12, 120);
    g.setColor(Color.WHITE);
    g.drawString("test", 50, 25);
}

最后,只需将组件添加到JFrame Form的构造函数中:

    add(new MyNewJPanel());
    pack();

确保您的JFrame的ContentPane具有适当的布局。

答案 2 :(得分:1)

如果我理解的话,你不应该实现paint,因为它调用了paintBorder,paintChildren和paintComponent。如果要使用组件处理边框和子项,请使用paint,但不建议使用。请改用paintComponent。