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

Swing算法可视化工具中JFrame起始坐标偏移问题排查

Swing算法可视化工具显示偏移问题修复

问题根源

你的代码存在三个核心错误,直接导致数组显示偏移、尺寸与窗口不匹配:

  1. PreferredSize宽高颠倒:getPreferredSize方法返回new Dimension(WIN_HEIGHT, WIN_WIDTH),把窗口宽高搞反,组件实际尺寸和预期不符。
  2. 构造函数setSize参数错误:SortArray构造函数中使用了未定义的WIDTH和HEIGHT,应替换为类中声明的WIN_WIDTH和WIN_HEIGHT。
  3. 窗口组件添加顺序错误:Display类中先显示窗口再添加SortArray组件,导致组件布局未被正确计算。

修复代码

SortArray类修改点

  • 修正getPreferredSize的宽高顺序:
@Override
public Dimension getPreferredSize() {
    return new Dimension(WIN_WIDTH, WIN_HEIGHT);
}
  • 修正构造函数中的setSize参数:
public SortArray() {
    setBackground(Color.BLACK);
    setSize(WIN_WIDTH, WIN_HEIGHT); // 替换原未定义的WIDTH、HEIGHT
    fillArray(array);
    repaint();
}

Display类修改点

调整组件添加和窗口初始化顺序,确保先添加组件再设置窗口属性:

public Display(){
    SwingUtilities.invokeLater(() -> {
        frame = new JFrame("Algorithm Visualiser");
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 先添加可视化组件
        sortArray = new SortArray();
        sortArray.setBorder(BorderFactory.createLineBorder(Color.red));
        frame.add(sortArray);

        // 再设置窗口尺寸与可见性
        frame.setSize(SortArray.WIN_WIDTH, SortArray.WIN_HEIGHT);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    });
}

额外优化提示

  • 移除paintComponent中多余的System.out.println(i),避免频繁打印拖慢可视化帧率。
  • 柱状条宽度BAR_WIDTH = (float) WIN_WIDTH / SIZE的计算逻辑是正确的,修正上述错误后,起始X偏移和尺寸不匹配问题会彻底解决。

内容的提问来源于stack exchange,提问作者domk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:16:15