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

Java小程序(Applet)中Paint方法问题(排序算法场景)

解决Applet中paint方法绘图空白的问题

嘿,我来帮你排查下这个困扰!这种在Applet的paint方法里绘制排序后数组却看不到内容的情况,我之前开发小Demo时也碰到过,大概率是这几个常见问题导致的,咱们一步步来解决:

1. 别忘调用父类的super.paint(g)

这是最容易忽略的关键细节!如果你的paint方法没有先调用父类的实现,Applet的绘图上下文可能没有正确初始化,导致后续的绘图操作都“无效”。一定要把它放在方法最开头:

@Override
public void paint(Graphics g) {
    super.paint(g); // 必须先调用,清理画布并初始化绘图环境
    // 你的绘图代码放在这里
}

2. 确保排序后的数组正确传递且触发重绘

如果你的Sort类完成排序后,没有把结果赋值给Applet的成员变量,或者没有调用repaint()触发重绘,paint方法拿到的还是空数组或者旧数据,自然画不出东西。

举个实用的例子,在Applet里这样处理:

private int[] sortedArray;
private Sort sortClass;

@Override
public void init() {
    // 初始化Sort类和原始数组
    sortClass = new Sort();
    int[] originalArr = {9, 3, 7, 1, 5};
    // 完成排序后赋值并触发重绘
    sortedArray = sortClass.sort(originalArr);
    repaint(); // 告诉Applet需要重新绘制界面
}

如果排序是耗时操作(比如处理大数据量),别在init或者paint里直接执行,要放到后台线程,然后在事件调度线程里更新数据并调用repaint():

new Thread(() -> {
    int[] sorted = sortClass.sort(largeOriginalArr);
    // 必须在Swing事件线程里更新UI相关操作
    SwingUtilities.invokeLater(() -> {
        sortedArray = sorted;
        repaint();
    });
}).start();

3. 检查绘图坐标是否在可见区域内

有时候代码逻辑没问题,但计算出来的坐标超出了Applet的界面范围,导致图形画到了“看不见的地方”。比如画柱状图时,要根据Applet的宽高来计算每个元素的位置:

@Override
public void paint(Graphics g) {
    super.paint(g);
    if (sortedArray == null || sortedArray.length == 0) {
        g.drawString("暂无排序数据", 20, 20);
        return;
    }

    int appletWidth = getWidth();
    int appletHeight = getHeight();
    int barWidth = appletWidth / sortedArray.length;
    int maxBarHeight = appletHeight - 40; // 留底部空间放数字

    // 找出数组最大值,用来缩放柱子高度
    int maxValue = Arrays.stream(sortedArray).max().orElse(1);

    for (int i = 0; i < sortedArray.length; i++) {
        // 计算每个柱子的位置和高度
        int barHeight = (int) ((double) sortedArray[i] / maxValue * maxBarHeight);
        int x = i * barWidth;
        int y = appletHeight - barHeight; // 从底部往上画柱子

        // 绘制柱子和数值标签
        g.fillRect(x, y, barWidth - 2, barHeight); // 减2是为了柱子间留空隙
        g.drawString(String.valueOf(sortedArray[i]), x + 5, y - 5);
    }
}

4. 确认Applet的尺寸设置正确

如果Applet的默认尺寸太小,或者你没有在HTML里指定合适的宽高,也可能导致绘图内容显示不全或者看不到。比如在HTML里嵌入时:

<applet code="YourApplet.class" width="600" height="400"></applet>

先从这几点排查,基本就能解决界面空白的问题啦!

内容的提问来源于stack exchange,提问作者Moritz Holländer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:50:14