JTable学习笔记

一、跳转到指定行(确切地说,指定单元格)

1、百度一下“JTable跳转到指定行”

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
 
public class JTableNavigationExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("JTable Navigation Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        // 创建一个JTable
        JTable table = new JTable(new DefaultTableModel(new Object[]{"Column1", "Column2"}, 0));
 
        // 添加数据
        for (int i = 0; i < 10; i++) {
            table.getModel().addRow(new Object[]{i, "Row " + i});
        }
 
        // 跳转到指定行
        goToRow(table, 5); // 跳转到第6行(索引从0开始)
 
        frame.add(new JScrollPane(table));
        frame.pack();
        frame.setVisible(true);
    }
 
    private static void goToRow(JTable table, int rowIndex) {
        if (rowIndex >= 0 && rowIndex < table.getRowCount()) {
            // 改变选择到指定行
            table.changeSelection(rowIndex, 0, false, false);
            // 滚动到指定行
            table.scrollRectToVisible(table.getCellRect(rowIndex, 0, true));
        }
    }
}

在这个例子中,goToRow方法会将JTable的选择改变到指定的行,并且滚动到该行的可视区域。注意,changeSelection方法的第三个和第四个参数分别表示是否是通过用户交互改变选择以及是否通知监听器,通常设置为false。 

2、主要用到这行代码就行了:table.changeSelection(rowIndex, 0, false, false);

 二、编辑状态时的字体样式设置

1、重写方法

import javax.swing.*;
import javax.swing.table.TableCellEditor;
import java.awt.*;

public class newTableCellEditor extends AbstractCellEditor implements TableCellEditor {

    private JTextField component = new JTextField();
    private Font font = new Font("Arial Unicode MS", Font.PLAIN, 28);

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

        component.setText((String) value);
        component.setFont(font);
        return component;
    }

    @Override
    public Object getCellEditorValue() {
        return component.getText();
    }
}
2、调用方法
jTable.getColumnModel().getColumn(col).setCellEditor(new newTableCellEditor());

三、设置编辑时字体样式时需注意!

/** 注意:以下2行代码中,<“编辑时字体样式”代码> 应优先排布于 <“单元格设置”代码>;否之,将影响“首次编辑”时的效果。*/
// 设置编辑时的字体样式
Comp.table_home.getColumnModel().getColumn(col).setCellEditor(new newTableCellEditor());// “编辑时字体样式”代码
// 直接进入编辑状态
Comp.table_home.editCellAt(row,col);// “单元格设置”代码

 注意:

      这2行代码中,<“编辑时字体样式”代码> 应优先排布于 <“单元格设置”代码>;否之,将影响“首次编辑”时的效果。

四、代码更新

2024.06.05更新——

说明: 此处更新是针对本文【第(二、)大点,第(1、)小点】

 我的实践过程:在JTable中,需求列的单元格的数据类型BigDecimal,而我需要改变编辑时的字体样式,因此而用到该重写方法。在昨天,我添加了一步“清空输入”的操作,就发发了“java.math.BigDecimal cannot be cast to java.lang.String”的问题,即(情况1)先“清空输入”,再去点击单元格,出现错误;(情况2)先在单元格输入数据,再切换(刷新)表格,再回到之前输入数据的单元格,出现错误。

原代码:

修改后代码:

if (value!=null){
     // component.setText((String) value);  // 存在java.math.BigDecimal cannot be cast to java.lang.String问题
     component.setText(value.toString());// 解决了java.math.BigDecimal cannot be cast to java.lang.String问题
}else {
      component.setText(null);// 清除前一次输入
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值