Java图形在没有扩展的情况下不执行绘制功能
我一直在与Java的图形作斗争,我一直在阅读有关绘制Java图形的文档和教程 我发现的每个示例似乎都有一个主类,它扩展了JPanel,然后调用自己,以某种方式执行paint函数 不使用extends就可以绘制图形吗?我有一个基本程序Java图形在没有扩展的情况下不执行绘制功能,java,swing,graphics,paint,Java,Swing,Graphics,Paint,我一直在与Java的图形作斗争,我一直在阅读有关绘制Java图形的文档和教程 我发现的每个示例似乎都有一个主类,它扩展了JPanel,然后调用自己,以某种方式执行paint函数 不使用extends就可以绘制图形吗?我有一个基本程序 import javax.swing.*; import awt.Graphics; public class basicWindow { public static void main(String[] args) { JFrame
import javax.swing.*;
import awt.Graphics;
public class basicWindow {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("Basic Window");
frame.setSize(300, 300);
frame.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
JPanel panel = new JPanel();
frame.add(panel);
frame.setVisible(true);
}
public void paint(Graphics g) {
g.fillRect(5, 15, 50, 75);
}
}
这会打开一个窗口,但不会绘制我所期望的任何内容,因为我不知道如何执行paint函数
如果我尝试
Graphics graphic = new Graphics();
paint(graphic);
它不起作用,因为它抱怨类是抽象的。您需要阅读教程并遵循它们。JavaSwing使用被动图形,您的代码需要尊重这一点
- 根据教程,让您的绘图类扩展JPanel
- 在paintComponent方法覆盖内绘制
- 不要忘记
注释@Override
- 您可以在BuffereImage上绘制,并在paintComponent方法中显示。这仍然需要扩展组件
- 您可以使用通过在组件上调用
获得的图形对象进行绘制,但是如果这样做,图像将不稳定,并且您可能会抛出NPE,因此不建议这样做getGraphics()
缓冲区图像上绘制
如果在JLabel
(我们称之为标签
)中显示该图像,则要在图像更改后更新屏幕,只需调用:
label.repaint();
扩展部分是问题的一部分,我希望使用它时不会出现问题extends@Trent当前位置最好的答案是不要。为什么您不希望使用标准的Swing协议呢?在使用extends之前,我遇到了几个问题,我的类被强制保留为该对象unconditionally@Trent:通常,这些类型的问题最好通过良好的MVC关注点分离来解决。这样做,你就可以让图形和视图保持原样了。@AndrewThompson:请给出答案