У меня есть JTable, который содержится в области прокрутки, которая, в свою очередь, находится на панели, встроенной в JFrame.Если JFrame развернут, то есть свободное место, как внизу, так и справа от JTable.
Я хочу отменить выбор в таблице, если пользователь щелкает вне таблицы, либо нижестол или справа от стола.
Чтобы очистить выделение, когда пользователь щелкает НИЖЕ таблицы, я настроил таблицу так, чтобы она заполняла высоту области просмотра полосы прокрутки, и добавил MouseListener в таблицу, чтобы при щелчке пользователя под таблицей, "rowAtPoint" возвращает -1, а затем я очищаю выбор.Тем не менее, это не работает для RHS таблицы.Стол даже не получает эти события мыши.Как мне обнаружить щелчок справа от JTable и отменить выбор на столе?Смотрите код ниже.Обратите внимание, что я не удосужился сделать код красивым и делать все правильно.Я сосредоточился только на создании SSCCE, который проиллюстрировал проблему.:)
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class TableTest {
public static void main(String args[]) {
JFrame f = new JFrame();
JPanel p = new JPanel(new BorderLayout());
JScrollPane sp = new JScrollPane();
final JTable t = new JTable(5,5);
t.setFillsViewportHeight(true);
t.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for(int i = 0; i < 5; i++) {
t.getColumnModel().getColumn(i).setWidth(50);
t.getColumnModel().getColumn(i).setMaxWidth(75);
}
t.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
int row = t.rowAtPoint(e.getPoint());
if(row == -1) {
t.clearSelection();
}
}
});
sp.getViewport().add(t);
p.add(sp, BorderLayout.CENTER);
f.add(p);
f.pack();
f.setVisible(true);
}
}
РЕДАКТИРОВАТЬ: Я понимаю, что, возможно, я мог бы просто добавить слушатель мыши к панели прокрутки или панели, так что выбор таблицы очищается, когда я нажимаю на них.Мне просто интересно, есть ли лучшее / более чистое решение, чтобы убедиться, что выбор JTable очищается, когда я щелкаю за его пределами.