paintComponent传入一个抽象类,可以在上面执行函数,反正听起来不真实的,所以肯定有具体Graphics的定义,我在琢磨能不能引用那个具体类,能不能跳过重新定义paintComponent进程直接画东西。
vnzz0bqm1#
实际上,查看API,JComponent.paint()方法需要一个参数:Graphics,一个抽象类。但这只是API,这意味着在运行时需要传递一些简洁的实现。如果你阅读API文档,有两个已知的子类:DebugGraphics(不是抽象的)和Graphics2D(又是抽象的)。当你运行一些Swing应用程序时,你会看到组件接收Graphics 2D的实现。在我的java-11-openjdk-amd 64中,类sun.java2d.SunGraphics2D是一个简洁的类。您可以通过子类化任何JComponent并使用
public void paint(Graphics g) { System.out.println(g.getClass().getName()); super.paint(g); }
1条答案
按热度按时间vnzz0bqm1#
实际上,查看API,JComponent.paint()方法需要一个参数:Graphics,一个抽象类。
但这只是API,这意味着在运行时需要传递一些简洁的实现。如果你阅读API文档,有两个已知的子类:DebugGraphics(不是抽象的)和Graphics2D(又是抽象的)。
当你运行一些Swing应用程序时,你会看到组件接收Graphics 2D的实现。在我的java-11-openjdk-amd 64中,类sun.java2d.SunGraphics2D是一个简洁的类。
您可以通过子类化任何JComponent并使用