JTable:是否可以禁用“滚动到列”?

3
我有一个具有约20列的模型的JTable。这比单个屏幕可以容纳的更多,因此滚动条使用户可以向上/向下和左/右滚动。
现在,如果用户向右滚动并单击一行,那么该行将被正常选择。但是,如果用户然后使用滚动条向左滚动,并按下向下箭头键,则JTable会自动再次向右滚动(并选择下一行)。就好像JTable记住了用户第一次单击的列,当使用向下箭头键时,JTable只需取该列并向下移动一行并滚动回该列。
是否有一种方法可以禁用此行为,以便用户保持所选视图而不进行所有这些“魔术”滚动?
3个回答

4

滚动JTable与单元格选择无关。

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

但实际上,您描述的行为在任何GUI中都是标准的。例如Intellij、Excel、Word、Editplus等,如果使用箭头键进行导航,则始终会滚动回到上次单击的位置。

但是,除了GUI讨论之外,让我们回到您的问题上。

我认为您可以通过以下方式解决:

setAutoscrolls(false);

在您的JTable上

2
但它也禁用了垂直滚动! - WSS

1
你可以尝试使用 setColumnSelectionAllowed(false),这样用户就无法首先选择列了。

不幸的是,这并不会影响到不需要的行为 :-( - sbrattla
我认为你的问题类似于这个:https://dev59.com/LXI95IYBdhLWcg3w1Bro - Efthymis
没有真正改变行为,但我很感激你抽出时间回答! - sbrattla

0

我使用这个 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);
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接