Java开发:如何将自定义Drawing类导入Main主类并正确实例化使用
Java Swing自定义组件导入与实例化问题修复
现有代码核心问题
- 实例化
Drawing类时参数错误:Drawing提供的是无参构造方法,无需传入Graphics对象,paintComponent方法的Graphics参数会由Swing框架在组件绘制时自动传入,不需要手动传递。 - 实例化完成后未将
Drawing组件添加到JFrame容器中,组件无法渲染显示。 - 原代码中
Drawing dc = new Drawing(Graphics g);属于语法错误,不符合Java对象实例化的写法规范。
修复后代码
修正后的Main类
import javax.swing.*; import java.awt.*; public class Main { public static void main(String[] args) { // Swing组件操作放在事件调度线程中执行,避免界面渲染异常 SwingUtilities.invokeLater(() -> { int w = 640; int h = 480; JFrame f = new JFrame(); // 正确实例化无参的Drawing类 Drawing dc = new Drawing(); // 将自定义组件添加到JFrame的内容面板中 f.add(dc); f.setSize(w, h); f.setTitle("Digits"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }); } }
优化后的Drawing类(仅新增父类方法调用避免绘制异常)
import java.awt.*; import java.awt.geom.*; import javax.swing.*; class Drawing extends JComponent { public Drawing() { } @Override protected void paintComponent(Graphics g){ // 调用父类paintComponent保证组件背景正常绘制 super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; RenderingHints rh = new RenderingHints( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHints(rh); Path2D.Double curve = new Path2D.Double(); curve.moveTo(250,400); curve.curveTo(350,300,500,300,600,400); g2d.draw(curve); } }
内容的提问来源于stack exchange,提问作者lily
相关产品推荐
相关产品推荐

