我有java.awt.Window
的子类。在这个子类中,我想覆盖public void paint(Graphics g)
函数来绘制我自己的东西。
问题是我不知道如何正确调用重绘。一切都已实施,我确信它有效,因为如果我打开FileChooser
并关闭它java.awt.Window
重新绘制,并在其上显示正确的内容。
但如果我自己调用对象的repaint()
方法,则不会重新绘制。
您是否知道我如何正确调用重绘?
public class MyWindow extends java.awt.Window {
public MyWindows(Window owner) {
super(owner);
}
public void paint(Graphics g) {
g.fillRect(50,50,50,50);
}
}
MyWindow window = new MyWindow(owner);
window.repaint(); //this call the paint method but dont show drawn things
答案 0 :(得分:1)
我建议您阅读Oracle提供的custom painting tutorial。
首先,你应该使用一个框架,而不是一个窗口。使用JFrame
,这是Swing为创建框架提供的内容。 Swing建立在AWT之上,适用于现代开发。
您应该创建一个新面板并覆盖它的绘制方法,而不是覆盖框架的paint(Graphics)
(在框架上绘画)。它还建议覆盖paintComponent
而不是paint
:
class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
//paint
}
}
然后,您可以将此面板添加到您的框架中:
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
JFrame frame = new JFrame();
JPanel panel = new MyPanel();
panel.setSize(...);
frame.add(panel);
frame.pack();
frame.setVisible(true);
});
}