JTable: возможно ли отключить «прокрутку до столбца»? - PullRequest
2 голосов
/ 22 декабря 2011

У меня есть JTable с моделью, которая имеет около 20 столбцов. Это больше, чем вы можете уместить на одном экране, поэтому полосы прокрутки позволяют пользователям прокручивать вверх / вниз и вправо / влево.

Теперь, если пользователь полностью прокручивает вправо и щелкает строку, тогда эта строка выбирается очень хорошо. Однако, если пользователь затем использует полосы прокрутки для прокрутки полностью влево, а затем нажимает клавишу со стрелкой вниз, JTable автоматически снова прокручивает полностью вправо (и выбирает следующую строку). Как будто JTable запоминает столбец, в котором пользователь впервые щелкнул, и при использовании клавиши со стрелкой вниз JTable просто берет этот столбец и перемещается вниз на одну строку и прокручивает обратно к этому столбцу.

Есть ли способ отключить это поведение, чтобы пользователь оставался в выбранном представлении без JTable, выполняющего всю эту "волшебную" прокрутку?

Ответы [ 3 ]

3 голосов
/ 22 декабря 2011

Прокрутка объекта JTable, связанного с выбором ячейки.

Нажатие на ячейку заставит Jtable поставить на нее клетку. это означает, что вся будущая навигация будет с последнего нажатого места. Не важно, сколько вы прокрутите это последнее местоположение будет отправной точкой навигации по клавише.

Но на самом деле поведение, которое вы описываете, является стандартным в любом графическом интерфейсе. Возьмите Intellij, Excel, Word, Editplus, ... если вы используете клавиши со стрелками для навигации, вы всегда прокручиваете назад к месту последнего нажатия.

но обсуждения GUI возвращаются к вашей проблеме

Я думаю, вы можете заставить его работать с

setAutoscrolls(false);

на вашем jtable

1 голос
/ 22 декабря 2011

Вы можете попробовать setColumnSelectionAllowed(false), чтобы пользователь не мог выбрать столбец на первом месте.

0 голосов
/ 04 марта 2019

Я предотвращаю это поведение с помощью этого переопределения 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);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...