Щелкните правой кнопкой мыши MouseListener на всем компоненте JTable - PullRequest
5 голосов
/ 18 января 2012

Я использую Netbeans, разработал окно с JTable, добавил слушатель MouseEvent для компонента JTable и добавил следующий код:

private void productsTableMousePressed(java.awt.event.MouseEvent evt) {
    if(evt.isPopupTrigger()) {
        tablePopupMenu.setLocation(evt.getXOnScreen(), evt.getYOnScreen());
        tablePopupMenu.setVisible(true);
        System.out.println("Fired!");
    }
}

private void productsTableMouseReleased(java.awt.event.MouseEvent evt) {
    if(evt.isPopupTrigger()) {
        tablePopupMenu.setLocation(evt.getXOnScreen(), evt.getYOnScreen());
        tablePopupMenu.setVisible(true);
    }
}

Но это работает только тогда, когда я нажимаю на некоторые ячейки.Я хочу, чтобы это работало на всей области JTable.Как?

Ответы [ 3 ]

3 голосов
/ 18 января 2012

Если ваша таблица находится внутри JScrollPane, она может не покрывать весь видовой экран.Чтобы убедиться, что вся область вашего видового экрана покрыта, позвоните setFillsViewportHeight(true) на вашем столе.

3 голосов
/ 18 января 2012

Но это работает только тогда, когда я нажимаю на некоторые ячейки, но я хочу, чтобы оно работало на всей области JTable

MouseListener будет работать на всех ячейках.Я не знаю, следует ли вам использовать метод setLocation (...).

См. Отображение всплывающего меню , например, код.

Или лучшеПодход заключается в использовании:

table.setComponentPopupMenu(...);
0 голосов
/ 11 мая 2013

Я обнаружил, что в моем JTable (который находится в JScrollPane, вложенном в JInternalFrame) могут быть проблемы с прокруткой и изменением размера, когда JTable был больше, чем JScrollPane.

В основном, еслирамка находится на моем левом мониторе, но я прокрутил всю таблицу вправо, на моем правом мониторе появилось всплывающее окно.

Я просмотрел результаты четырех разных опций: getMousePositions () как для фрейма, так и для области прокрутки, а также для события мыши getX и getXOnScreen ().

Единственный, который дал мне желаемые результаты, - это getMousePositions () для фрейма.Все остальное было компенсировано его собственным внутренним представлением о мире, что имеет смысл для меня.

Так что я думаю, что я говорю, будьте осторожны, когда вы получаете координаты мыши.

...