Java 如何将JTable滚动到特定值?

Java 如何将JTable滚动到特定值?,java,swing,scroll,jtable,Java,Swing,Scroll,Jtable,我有一个JTable显示日志文件的内容,第一列是以毫秒为单位的时间戳(例如10:31:54.531)。 此列已对数据进行排序。 我想允许用户滚动到他感兴趣的时间戳 下面是我想做的一个Java片段: String myTimestamp=“10:31:54.531”; 整数myRowIndex=getRowIndexFromStringTimestamp(myTimestamp); myJTable.getSelectionModel().setSelectionInterval(myRowInd

我有一个
JTable
显示日志文件的内容,第一列是以毫秒为单位的时间戳(例如10:31:54.531)。 此列已对数据进行排序。 我想允许用户滚动到他感兴趣的时间戳

下面是我想做的一个Java片段:

String myTimestamp=“10:31:54.531”;
整数myRowIndex=getRowIndexFromStringTimestamp(myTimestamp);
myJTable.getSelectionModel().setSelectionInterval(myRowIndex,myRowIndex);
scrollRectToVisible(新矩形(myJTable.getCellRect(myRowIndex,0,true));
但是如何实现getRowIndexFromStringTimestamp

谢谢

  • 我认为,与在
    XxxTableModel
    JTables视图
    中循环和搜索比较所需的值相比,这是最简单的

  • 必须为包含
    日期(DateTime
    )值的列设置适当的值

  • 否则必须在
    XxxTableModel
    JTables视图中循环搜索,并比较值

      • 我认为,与在
        XxxTableModel
        JTables视图
        中循环和搜索比较所需的值相比,这是最简单的

      • 必须为包含
        日期(DateTime
        )值的列设置适当的值

      • 否则必须在
        XxxTableModel
        JTables视图中循环搜索,并比较值


      您需要一个表的引用,并使用组合
      JTable\getRowCount
      JTable\getValueAt

      int matchIndex = -1;
      for (int rowIndex = 0; rowIndex < myJTable.getRowCount(); index++) {
          Object value = myJTable.getValueAt(rowIndex, colIndex);
          if (value.equals(timestamp)) { // Or what ever comparison you need..
              matchIndex = rowIndex;
              break;
          } 
      }
      return matchIndex;
      
      int-matchIndex=-1;
      对于(int rowIndex=0;rowIndex

      这样做的问题是,数据越多,速度就会越慢。

      您需要一个表的引用,并使用组合
      JTable\getRowCount
      JTable\getValueAt

      int matchIndex = -1;
      for (int rowIndex = 0; rowIndex < myJTable.getRowCount(); index++) {
          Object value = myJTable.getValueAt(rowIndex, colIndex);
          if (value.equals(timestamp)) { // Or what ever comparison you need..
              matchIndex = rowIndex;
              break;
          } 
      }
      return matchIndex;
      
      int-matchIndex=-1;
      对于(int rowIndex=0;rowIndex

      问题是,数据越多,速度就会越慢。

      谢谢!我将尝试过滤并在过滤后获得一行索引(在模型中),然后我可以删除过滤并滚动到此行索引,谢谢!我将尝试过滤并在过滤后获得一行索引(在模型中),然后我可以删除过滤并滚动到此行索引。谢谢,我将尝试一下。用户不应该加载超过150k行,这大约是一天的数据(他们更容易加载一整天,然后在不同的时间点跳转),二进制搜索不合适吗?条目毕竟是排序的。@lhballoti假设模型中的数据是排序的,是的。我刚刚尝试了它(没有二进制搜索),在150k行上的性能很快,所以这对我很有用!谢谢,我试试看。用户不应该加载超过150k行,这大约是一天的数据(他们更容易加载一整天,然后在不同的时间点跳转),二进制搜索不合适吗?条目毕竟是排序的。@lhballoti假设模型中的数据是排序的,是的。我刚刚尝试了它(没有二进制搜索),在150k行上的性能很快,所以这对我很有用!