java paintComponent()
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(),则应该重新绘制上面的组件。
道格·豪夫
发布于 2013-11-07 03:29:33
是的,MyClass需要添加到屏幕上可显示的东西中,这样才能被绘制。这里的理由是MyClass扩展了JComponent,myTestClass扩展了JPanel,它们没有任何关系,所以从myTestClass内部调用super.paintComponent不会以任何方式绘制或更新MyClass。
您想要绘制的任何东西都必须添加到可显示的容器中。
有关绘画的更多细节,请看一看AWT和Swing中的绘画。
您可以根据需要在任何repaint个人或其父容器上调用Component
https://stackoverflow.com/questions/19827387
复制相似问题