【问题标题】:JTable : is it possible to disable "scroll to column"?JTable:是否可以禁用“滚动到列”?
【发布时间】:2012-01-25 21:10:21
【问题描述】:

我有一个 JTable,它的模型大约有 20 列。这超出了单个屏幕所能容纳的范围,因此滚动条使用户能够向上/向下和向右/向左滚动。

现在,如果用户一直滚动到右侧并单击一行,那么该行就会被选中。但是,如果用户随后使用滚动条一直向左滚动,然后按下向下箭头键,则 JTable 会再次自动一直向右滚动(并选择下一行)。就好像 JTable 记住了用户第一次单击的列,并且当使用向下箭头键时,JTable 只获取该列并向下移动一行并滚动回该列。

有没有办法禁用此行为,以便用户留在选定的视图中,而 JTable 不会进行所有这些“神奇”滚动?

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

    滚动一个 JTable 并不连接到单元格选择。

    单击一个单元格将使 Jtable 将其光标放在该单元格上。这意味着所有未来的导航都将从最后点击的地方开始。无论您滚动了多少最后一个位置,都将是关键导航的起点。

    但实际上您描述的行为只是任何 gui 的标准。以 Intellij、Excel、Word、Editplus 为例,如果您使用箭头键导航,您总是会滚动回上次单击的位置。

    但是 GUI 讨论抛开你的问题

    我认为你可以让它工作

    setAutoscrolls(false);
    

    在你的 jtable 上

    【讨论】:

    • 但是它也禁用了垂直滚动!
    【解决方案2】:

    你可以试试setColumnSelectionAllowed(false),这样用户一开始就无法选择列。

    【讨论】:

    【解决方案3】:

    我通过这个 JTable 覆盖来防止这种行为。

    请注意,我的表格不关心单元格选择,只绘制行选择(没有单元格选择边框)。

      @Override
      public void changeSelection(int rowIndex, int columnIndex, boolean toggle, boolean extend)
      {
        // essentially disabling cell selection, selected column index will always be 0
        columnIndex = 0;
        super.changeSelection(rowIndex, columnIndex, toggle, extend);
      }
    

    【讨论】:

      猜你喜欢
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 2013-07-30
      • 2015-06-01
      相关资源
      最近更新 更多