首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JTable使用TableRowSorter获取正确的行

使用JTable使用TableRowSorter获取正确的行
EN

Stack Overflow用户
提问于 2014-08-08 07:36:30
回答 2查看 1.4K关注 0票数 2

我目前正在使用JTable和TableRowSorter来为用户实现一个搜索函数。下面是我的代码

代码语言:javascript
复制
    tblDutyList = new JTable() {
        @Override
        public java.awt.Component prepareRenderer(
                TableCellRenderer renderer, int row, int col) {
            java.awt.Component comp = super.prepareRenderer(renderer, row,
                    col);
            Object value = getModel().getValueAt(row, 4);
            if (value.equals("Inactive")) {
                comp.setBackground(Color.white);
                comp.setForeground(Color.GRAY);
            } else {
                if (tblDutyList.isCellSelected(row, col)) {
                    comp.setBackground(Color.lightGray);
                    comp.setForeground(Color.BLACK);
                } else
                    comp.setBackground(Color.white);
                comp.setForeground(Color.BLACK);
            }
            return comp;
        }
    };

    tblDutyList.setFillsViewportHeight(true);
    String dutyId = "0", dutyName = "", dutyDesc = "", dutySectorName = "", dutyStatus = "", dutyRemoveReason = "";

    Duty d = new Duty(Integer.parseInt(dutyId), dutyName, dutyDesc,
            dutySectorName, dutyStatus, dutyRemoveReason);

    ArrayList<Duty> dutyResult = rdc.processRetrieveDuties(d);

    DutyModel dutyModel = new DutyModel(dutyResult);

    tblDutyList.setModel(dutyModel);
    scrollPane.setViewportView(tblDutyList);

    // sorter for search function
    sorter = new TableRowSorter<TableModel>(dutyModel);
    tblDutyList.setRowSorter(sorter);

    // customizing how the table looks
    tblDutyList.setRowHeight(100);
    tblDutyList.getColumnModel().getColumn(0)
            .setCellRenderer(new MyCellRenderer());
    tblDutyList.getColumnModel().getColumn(1)
            .setCellRenderer(new MyCellRenderer());
    tblDutyList.getColumnModel().getColumn(2)
            .setCellRenderer(new MyCellRenderer());
    tblDutyList.getColumnModel().getColumn(3)
            .setCellRenderer(new MyCellRenderer());
    tblDutyList.getColumnModel().getColumn(4)
            .setCellRenderer(new MyCellRenderer());
    tblDutyList.getColumnModel().getColumn(5)
            .setCellRenderer(new MyCellRenderer());

在这里,JTable将从数据库中加载我的所有职责。在此之后,用户可以从表中选择一行并执行一些任务,如分配、更新和删除。但是,我的问题是,当我使用filter函数时,用户将得到错误的记录,例如,第一项任务是“擦窗”,第二项任务是“扫地”,而我过滤掉“扫地”,然后将“扫地”呈现为表顶部的“扫地”记录。用户选择结果(“扫地”)并按任意一个actionPerform,然后重定向以获得“擦窗”,因为这是最初的第一个值。这是我的actionPerformed代码的一部分:

代码语言:javascript
复制
            if (tblDutyList.getSelectedRow() != -1) {                   
                int rowIndex = tblDutyList.getSelectedRow();
                int idDuty = (int) tblDutyList.getModel().getValueAt(
                        rowIndex, 0);
                String name = (String) tblDutyList.getModel().getValueAt(
                        rowIndex, 1);
                String desc = (String) tblDutyList.getModel().getValueAt(
                        rowIndex, 2);
                String sector = (String) tblDutyList.getModel().getValueAt(
                        rowIndex, 3);

                String status = (String) tblDutyList.getModel().getValueAt(
                        rowIndex, 4);

这可能意味着我的actionPerformed将在特定位置获得值,而不是在用户被重定向之前读取这些值。任何帮助都是非常感谢的。提前谢谢!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-08 07:41:44

您会想使用JTable的一种转换方法.

  • JTable#convertRowIndexToModel(int)
  • JTable#convertRowIndexToView(int)

这将允许您在视图和模型认为行值意味着什么之间进行转换,例如.

代码语言:javascript
复制
int rowIndex = tblDutyList.getSelectedRow();
rowIndex = tblDutyList.convertRowIndexToModel(rowIndex);
int idDuty = (int) tblDutyList.getModel().getValueAt(
                    rowIndex, 0);

仔细观察

  • 如何使用表
  • 如何使用表、排序和筛选

更多细节..。

票数 7
EN

Stack Overflow用户

发布于 2014-08-08 07:41:17

从医生那里。(你应该读) JTable..。

类似地,当使用RowSorter提供的排序和过滤功能时,底层TableModel不需要知道如何进行排序,而是由RowSorter来处理。当使用基于行的JTable方法和底层TableModel时,坐标转换是必要的。所有基于JTables行的方法都是以RowSorter为基础的,这不一定与底层TableModel的方法相同。例如,选择总是以JTable的形式进行,因此在使用RowSorter时,需要使用convertRowIndexToViewconvertRowIndexToModel进行转换。。。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25198255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档