swing Java组件()
java组件()
class MyClass extends JComponent {
void paintComponent() {
//code for class here
}
}
class myTestClass extends JPanel {
MyClass temp = new MyClass();
void paintComponent() {
super.paintComponent();
static void main(String[] a) {
JFrame f = new JFrame();
//Does the temp have to be added to the panel before it can be repainted
}
} //End Class
我知道JPanel
进入JFrame
。但是类(MyClass
)是否必须添加到JPanel
中,因为paintComponent()
将使用super.paintComponent()
重新绘制子节点。我认为情况就是这样。如果是这种情况,那么temp.repaint()
应该在super.paintComponent()
重新绘制组件时调用它的任何地方重新绘制该特定组件
这似乎是一个没有人或至少没有人真正发布过的答案。我的解释可能有点夸张,所以我会在这里尝试澄清
如果我有几个扩展JComponent的类,我希望它们都能在类中使用,这样我就可以重新绘制它们。假设一个是圆、长方形、正方形等等
如果它们都有一个paintComponent()
和一个super.paintComponent()
,那么它们应该能够用VariableName.repaint();
重新绘制
是否必须将它们添加到将它们作为内容保存的JPanel
中。它们可以从代码中的任何地方被调用repaint()
(我认为情况就是这样)
驾驶员等级:
class MyMainDriverClass {
A a = new A();
B b = new B();
C c = new C();
void someClass() {
a.repaint();
b.repaint();
c.repaint(); //this should repaint the components if the JPanel is inside of the JFrame
//(I didn't put this code in)
}
}
如果创建的所有类都有paintComponent()
,那么应该重新绘制上面的组件
道格·豪夫
# 1 楼答案
是的
MyClass
需要添加到屏幕上可显示的内容中才能绘制。这里的理由是MyClass
扩展JComponent
和myTestClass
扩展JPanel
,它们没有任何关系,因此从myTestClass
内调用super.paintComponent
不会以任何方式绘制或更新MyClass
任何你想画的东西都必须被添加到一个可显示的容器中
看看Painting in AWT and Swing了解更多关于绘画的细节
您可以根据需要在任何
Component
个人或其父容器上调用repaint