【发布时间】:2014-08-08 07:36:30
【问题描述】:
我目前正在使用带有 TableRowSorter 的 JTable 来为用户实现搜索功能。下面是我的代码
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 将从数据库中加载我所有的职责。之后,用户可以从表中选择一行并执行一些任务,例如分配、更新和删除。但是,我的问题是,当我使用过滤功能时,用户会得到错误记录,例如第一个任务是“擦窗户”,第二个任务是“扫地” ,然后我过滤掉“扫地”,然后将“扫地”渲染为桌子正上方的记录。用户选择结果(“扫地”)并按下任何 actionPerform,将被重定向到“清洁窗户”,因为这最初是第一个值。这是我的一部分 actionPerformed 代码:
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 将在特定位置获取值,而不是在我的用户被重定向之前读取值。任何帮助是极大的赞赏。提前致谢!!
【问题讨论】:
标签: java swing jtable tablerowsorter