根据Jtextfield Input从Jtable中选择一行

时间:2012-10-08 07:31:16

标签: java swing jtable jtextfield

我有一个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行?

2 个答案:

答案 0 :(得分:4)

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

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

作为替代方案,您可以使用内置搜索功能的SwingX项目的JTable。 SwingX库还包含一个允许搜索此类JXTable的组件(请参阅JXTableJXSearchPanel

答案 1 :(得分: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;
    }
}

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