You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:39:01