隐藏列但未读取正确值
Hidden column but not read the correct value
我用 TableModel 创建了一个简单的 JTable,并隐藏了第一列。
我在我的 JTable 中也设置了 TableRowSorter
这是我用来创建 table
的代码
tableModelArticoliVendere = new MyTableModelDescrizioneArticoli();
tableArticoliVendere = new CustomTableArticoliDaVendereBar(tableModelArticoliVendere);
sorter = new TableRowSorter<MyTableModelDescrizioneArticoli>(tableModelArticoliVendere);
tableArticoliVendere.setRowSorter(sorter);
tableArticoliVendere.addMouseListener(new MyMouseAdapterArticoliDaVendere());
tableArticoliVendere.removeColumn(tableArticoliVendere.getColumnModel().getColumn(0));
如果用户单击 table 的一行,则调用鼠标侦听器。
这是方法:
public class MyMouseAdapterArticoliDaVendere extends MouseAdapter {
public void mouseClicked(MouseEvent me) {
JTable t = (JTable)me.getSource();
if (me.getClickCount() == 1) {
String codiceArticolo =((JTable)tableArticoliVendere).getModel().getValueAt(t.getSelectedRow(), 0).toString();
inserisciProdotto(codiceArticolo);
}
}
}
问题是这样的:
如果我看到完整的 table 并点击其中的一行 table,我就正确地阅读了 codiceArticolo。如果我使用行过滤器,并尝试单击第一行,我会出错。
我有 3 行的 table 例如:
TABLE
column 0| column 1
------------------
valore1 | 1
valore2 | 2
valore3 | 3
如果我使用过滤器我会遇到这种情况:
TABLE
column 0| column 1
------------------
valore2 | 2
valore3 | 3
如果我尝试点击第一行,codiceArticolo 的值为 valore1 而不是 valore2。
如果我没有隐藏第 0 列,则不会出现此错误。
当您在 table 中启用排序或过滤时,table 行和列的索引停止与 model 行和列。您可以使用 convertRowIndexToModel
and convertColumnIndexToModel
.
来解释这一点
比如使用t.getSelectedRow()
时,可以这样调整:
int tableRowIndex = t.getSelectedRow();
int modelRowIndex = t.convertRowIndexToModel(tableRowIndex);
如果您在代码中指明何时使用视图索引和何时使用模型索引,这也会有所帮助。
我用 TableModel 创建了一个简单的 JTable,并隐藏了第一列。 我在我的 JTable 中也设置了 TableRowSorter 这是我用来创建 table
的代码tableModelArticoliVendere = new MyTableModelDescrizioneArticoli();
tableArticoliVendere = new CustomTableArticoliDaVendereBar(tableModelArticoliVendere);
sorter = new TableRowSorter<MyTableModelDescrizioneArticoli>(tableModelArticoliVendere);
tableArticoliVendere.setRowSorter(sorter);
tableArticoliVendere.addMouseListener(new MyMouseAdapterArticoliDaVendere());
tableArticoliVendere.removeColumn(tableArticoliVendere.getColumnModel().getColumn(0));
如果用户单击 table 的一行,则调用鼠标侦听器。
这是方法:
public class MyMouseAdapterArticoliDaVendere extends MouseAdapter {
public void mouseClicked(MouseEvent me) {
JTable t = (JTable)me.getSource();
if (me.getClickCount() == 1) {
String codiceArticolo =((JTable)tableArticoliVendere).getModel().getValueAt(t.getSelectedRow(), 0).toString();
inserisciProdotto(codiceArticolo);
}
}
}
问题是这样的: 如果我看到完整的 table 并点击其中的一行 table,我就正确地阅读了 codiceArticolo。如果我使用行过滤器,并尝试单击第一行,我会出错。
我有 3 行的 table 例如:
TABLE
column 0| column 1
------------------
valore1 | 1
valore2 | 2
valore3 | 3
如果我使用过滤器我会遇到这种情况:
TABLE
column 0| column 1
------------------
valore2 | 2
valore3 | 3
如果我尝试点击第一行,codiceArticolo 的值为 valore1 而不是 valore2。
如果我没有隐藏第 0 列,则不会出现此错误。
当您在 table 中启用排序或过滤时,table 行和列的索引停止与 model 行和列。您可以使用 convertRowIndexToModel
and convertColumnIndexToModel
.
比如使用t.getSelectedRow()
时,可以这样调整:
int tableRowIndex = t.getSelectedRow();
int modelRowIndex = t.convertRowIndexToModel(tableRowIndex);
如果您在代码中指明何时使用视图索引和何时使用模型索引,这也会有所帮助。