我有一个来自 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
最佳答案
我建议阅读custom painting tutorial由 Oracle 提供。
首先,您应该使用框架,而不是窗口。使用 JFrame
,这是 Swing 提供的用于创建框架的工具。 Swing 构建在 AWT 之上,更适合现代开发。
您应该创建一个新面板并重写它的paint方法,而不是重写框架的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);
});
}
关于java - 如何正确重写 awt Paint() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34054721/