0

我有一个 JTable 以这种格式显示内容:

Part Number    Quantity   Price
SD1131            7       1,000
SD6534            6       2,000

在同一帧上,我有一个 JTextfield(txtNo)。我需要这样当用户在 JTextfield 上键入零件号时,在 JTable 上选择相应的记录。到目前为止,我只能根据这样的行号选择记录:

txtNo.addFocusListener(new FocusAdapter() {
            public void focusLost(FocusEvent e) {

                int index1 = 0;
                int index2 = 0;
                try {
                    index1 = Integer.valueOf(txtNo.getText());
                    tbStore.setRowSelectionInterval(index2, index1);
                } catch (Exception ae) {
                    ae.printStackTrace();
                }
            }
        });

如何根据 JTextfield 的输入实现相同的方法来选择 JTable 行?

4

2 回答 2

4

您需要在表格中找到部件号等于在文本字段中输入的部件号的项目。采取的步骤:

  • 阅读文本字段的内容
  • 搜索匹配元素的索引TableModel
  • JTable使用该方法将该索引转换为相应的行索引convertRowIndexToView(考虑排序,过滤,...)
  • 使用 的setRowSelectionInterval方法JTable选择该行

作为替代方案,您可以使用JXTable内置搜索功能的 SwingX 项目。SwingX 库还包括一个组件,它允许搜索这样的JXTable(参见JXSearchPanelJXSearchField

于 2012-10-08T08:43:20.147 回答
2

您应该询问 TableModel 并找出哪一行包含您要查找的零件号:

for(int i=0;i<tbStore.getRowCount();i++) {

    // 0 is for the column Part number
    if(tbStore.getValueAt(i, 0).equals(Integer.valueOf(txtNo.getText())) {
        tbStore.setRowSelectionInterval(i, i);
        break;
    }
}

警告:我没有测试过这段代码,但它至少应该给你基本的想法。

于 2012-10-08T08:39:41.063 回答