Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JTable中实现一种搜索方法_Java_Swing_Jtable - Fatal编程技术网

Java 在JTable中实现一种搜索方法

Java 在JTable中实现一种搜索方法,java,swing,jtable,Java,Swing,Jtable,我试图在JTable中实现一个搜索方法,搜索代码是: private void searchTable() { String id = inputIdField.getText(); for(int row = 0; row <= listAllTable.getRowCount() - 1; row++) { System.out.println(row); if(id.equals(listAllTable.getValueA

我试图在JTable中实现一个搜索方法,搜索代码是:

private void searchTable()
{
    String id = inputIdField.getText();

    for(int row = 0; row <= listAllTable.getRowCount() - 1; row++) 
    {
        System.out.println(row);
        if(id.equals(listAllTable.getValueAt(row, 0))) 
        {
            listAllTable.scrollRectToVisible(listAllTable.getCellRect(row, 0, true));
            listAllTable.setRowSelectionInterval(row, row);
            for (int i = 0; i <= listAllTable.getColumnCount() - 1; i++) 
            {

                listAllTable.getColumnModel().getColumn(i).setCellRenderer(new HighlightRenderer());
            }
        }
        else
        {

        }
    }
}
但是,当我从DB中提取数据,将其放入数组并在JTable中显示时,搜索方法不起作用,它可以完美地获取行,但它不会通过
if(id.equals(listAllTable.getValueAt(row,0))
当值存在时,有人可以检查代码并解释原因吗?以下是构建我的JTable的代码:

private void buildJTable(ArrayList<SalesOrder> list)
{
    DefaultTableModel model = new DefaultTableModel()
    {
        private static final long serialVersionUID = 1L;
        public boolean isCellEditable(int row, int column) 
        {
            return false;
        }
    };
    model.setColumnIdentifiers(new String[] {"ID", "Customer ID", "Employee ID", "Voucher ID", "Status", "Date", "Price"});
    model.setRowCount(list.size());
    int row = 0;
    for(SalesOrder so : list)
    {
        model.setValueAt(so.getId(), row, 0);
        model.setValueAt(so.getCustomerId().getId(), row, 1);
        model.setValueAt(so.getEmployeeId().getId(), row, 2);
        model.setValueAt(so.getVoucherId().getId(), row, 3);
        model.setValueAt(so.getStatus(), row, 4);
        model.setValueAt(so.getDate(), row, 5);
        model.setValueAt(so.getPrice(), row, 6);
        row++;
    }
    listAllTable.setRowSelectionAllowed(true);

    listAllTable.setModel(model);
}
private void buildJTable(数组列表)
{
DefaultTableModel=新的DefaultTableModel()
{
私有静态最终长serialVersionUID=1L;
公共布尔值可编辑(int行,int列)
{
返回false;
}
};
model.setColumnIdentifiers(新字符串[]{“ID”、“客户ID”、“员工ID”、“凭证ID”、“状态”、“日期”、“价格”});
model.setRowCount(list.size());
int行=0;
for(销售订单销售订单:列表)
{
model.setValueAt(so.getId(),第0行);
model.setValueAt(so.getCustomerId().getId(),第1行);
model.setValueAt(so.getEmployeeId().getId(),第2行);
model.setValueAt(so.getVoucherId().getId(),第3行);
model.setValueAt(so.getStatus(),第4行);
model.setValueAt(so.getDate(),第5行);
model.setValueAt(so.getPrice(),第6行);
行++;
}
listAllTable.SetRowSelectionLowed(true);
setModel(model);
}
有人能看一下代码并解释一下,当从方法
private void buildJTable(ArrayList list)
生成时,为什么它不搜索我的JTable?它可以正确地构建所有内容,但不进行搜索


谢谢。

您只需比较不兼容的值即可。尝试更改您的搜索方法,如下所示

private void searchTable()
{
  String id = inputIdField.getText();

  for(int row = 0; row <= listAllTable.getRowCount() - 1; row++) 
  {
      System.out.println(row);
      String strVal = null == listAllTable.getValueAt(row, 0)? null : listAllTable.getValueAt(row, 0).toString();
      if(id.equals(strVal)) 
      {
        listAllTable.scrollRectToVisible(listAllTable.getCellRect(row, 0, true));
        listAllTable.setRowSelectionInterval(row, row);
        for (int i = 0; i <= listAllTable.getColumnCount() - 1; i++) 
        {

            listAllTable.getColumnModel().getColumn(i).setCellRenderer(new HighlightRenderer());
        }
    }
    else
    {

    }
  }
}
private void searchTable()
{
字符串id=inputIdField.getText();

对于(int row=0;row),您应该为您的模型使用
addRow()
方法,通过覆盖
getValueAt()
,让模型从
SalesOrder
类返回正确的值。请看一看。关于如何实现对
getValueAt()
setValueAt()的覆盖,在线上还有许多示例
DefaultTableModel
AbstractTableModel
@mKorbel中,我只修改了问题作者的代码以提供所需的功能。而RowFilter并不总是最佳解决方案,例如,如果您只想突出显示匹配的行(好的,这里的示例在这种情况下是错误的)@mKorbel我知道怎么做,但问题中没有问过。问过了,再次提示(您的答案是错误的,在运行时添加渲染器)这是渲染器中的作业,分别是浮动/变量参数
private void searchTable()
{
  String id = inputIdField.getText();

  for(int row = 0; row <= listAllTable.getRowCount() - 1; row++) 
  {
      System.out.println(row);
      String strVal = null == listAllTable.getValueAt(row, 0)? null : listAllTable.getValueAt(row, 0).toString();
      if(id.equals(strVal)) 
      {
        listAllTable.scrollRectToVisible(listAllTable.getCellRect(row, 0, true));
        listAllTable.setRowSelectionInterval(row, row);
        for (int i = 0; i <= listAllTable.getColumnCount() - 1; i++) 
        {

            listAllTable.getColumnModel().getColumn(i).setCellRenderer(new HighlightRenderer());
        }
    }
    else
    {

    }
  }
}