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

Java Swing:JTable刷新、单元格选中禁用及关卡冷却值异常问题

Java Swing游戏GUI问题解决方案

问题1:切换关卡时冷却值递减逻辑不生效

  • 先验证changeLevel方法是否被正确触发:在按下向下箭头的按键事件处理代码中加日志或断点,确认当前选中行到达表格底部时,是否真的进入了changeLevel方法。注意索引判断是否正确(比如行索引是从0开始计数)。
  • 确保冷却值更新后同步到smallTable的TableModel:Swing组件的数据完全依赖TableModel,仅修改内存变量不会更新界面。假设冷却值存储在coolDown变量,更新后需调用:
// 根据你的smallTable结构调整行、列索引,示例为第1行第2列
smallTable.getModel().setValueAt(coolDown - 1, 1, 2);

如果使用自定义TableModel,修改数据后要调用fireTableCellUpdated(row, column)通知界面刷新。

  • 检查changeLevel内是否有覆盖冷却值的代码:若每次切换关卡都重新初始化冷却值为默认值,会覆盖递减后的结果,需确保递减逻辑在初始化之后执行,或仅首次初始化时设置默认值。

问题2:JTable单元格可选中,影响游戏操作

  • 直接禁用单元格选中与编辑:对主JTable和smallTable执行以下设置:
// 禁用单元格编辑
mainTable.setDefaultEditor(Object.class, null);
smallTable.setDefaultEditor(Object.class, null);

// 彻底禁用所有选中模式
mainTable.setCellSelectionEnabled(false);
mainTable.setRowSelectionAllowed(false);
mainTable.setColumnSelectionAllowed(false);
mainTable.setSelectionMode(ListSelectionModel.NO_SELECTION);

smallTable.setCellSelectionEnabled(false);
smallTable.setRowSelectionAllowed(false);
smallTable.setColumnSelectionAllowed(false);
smallTable.setSelectionMode(ListSelectionModel.NO_SELECTION);

若上述设置无效,可自定义JTable类强制禁用选中:

public class NonSelectableTable extends JTable {
    public NonSelectableTable(TableModel model) {
        super(model);
        setDefaultEditor(Object.class, null);
        setSelectionMode(ListSelectionModel.NO_SELECTION);
    }

    @Override
    public boolean isCellEditable(int row, int column) {
        return false;
    }

    @Override
    public void changeSelection(int row, int col, boolean toggle, boolean extend) {
        // 空实现,禁止选中操作
    }
}
  • 数据刷新注意事项:更新二维数组后,必须通过TableModel触发界面刷新。使用DefaultTableModel时,直接调用setValueAt更新数据即可自动刷新;使用自定义Model时,修改数据后需调用fireTableDataChanged()(全量刷新)或fireTableCellUpdated(row, col)(局部刷新),确保界面同步最新数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:13:10