Swing算法可视化工具中JFrame起始坐标偏移问题排查
Swing算法可视化工具显示偏移问题修复
问题根源
你的代码存在三个核心错误,直接导致数组显示偏移、尺寸与窗口不匹配:
- PreferredSize宽高颠倒:
getPreferredSize方法返回new Dimension(WIN_HEIGHT, WIN_WIDTH),把窗口宽高搞反,组件实际尺寸和预期不符。 - 构造函数setSize参数错误:SortArray构造函数中使用了未定义的
WIDTH和HEIGHT,应替换为类中声明的WIN_WIDTH和WIN_HEIGHT。 - 窗口组件添加顺序错误: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
相关产品推荐
相关产品推荐

