Как я могу узнать, какая часть JTable выбирается при нажатии Enter? - PullRequest
0 голосов
/ 17 марта 2011

У меня есть JTable.Я хочу знать, какие строки и столбцы выбираются, когда пользователь нажимает Enter .Как я могу получить эту информацию?

Ответы [ 3 ]

1 голос
/ 17 марта 2011

Важный TableModelListener . TableModelEvent из метода tableChanged () скажет вам, какая строка и столбец были источником изменения.

1 голос
/ 17 марта 2011

Все компоненты Swing используют Actions для обработки нажатий клавиш. Действие по умолчанию для клавиши Enter - переместить выделение ячейки на одну строку вниз. Если вы хотите изменить это поведение, вам нужно заменить действие по умолчанию на пользовательское действие.

Проверьте Привязки клавиш для простого объяснения того, как заменить действие.

0 голосов
/ 17 марта 2011

Добавьте это к вашему столу. Имейте два int глобала для rowClicked и colClicked. Должно быть хорошо, чтобы пойти


        table.addMouseListener(new MouseAdapter(){
            public void mouseReleased(MouseEvent e)
            {
                rowClicked = rowAtPoint(e.getPoint());
                colClicked = columnAtPoint(e.getPoint());
            }

            public void mouseClicked(MouseEvent e)
            {
                rowClicked = rowAtPoint(e.getPoint());
                colClicked = columnAtPoint(e.getPoint());
            }
        });

Если вы говорите об использовании клавиатуры для регистрации события, вы должны найти выбранную ячейку, а затем добавить к ней KeyListener. Вы можете использовать следующий код, чтобы найти выбранную ячейку. Обратите внимание, что это действительно зависит от режима выбора ячейки.


public void getSelectedCells()
    {
        if (getColumnSelectionAllowed() && ! getRowSelectionAllowed())
        {
            // Column selection is enabled
            // Get the indices of the selected columns
            int[] vColIndices = getSelectedColumns();
        }
        else if (!getColumnSelectionAllowed() && getRowSelectionAllowed())
        {
            // Row selection is enabled
            // Get the indices of the selected rows
            int[] rowIndices = getSelectedRows();
        }
        else if (getCellSelectionEnabled())
        {
            // Individual cell selection is enabled

            // In SINGLE_SELECTION mode, the selected cell can be retrieved using
            setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            int rowIndex = getSelectedRow();
            int colIndex = getSelectedColumn();

            // In the other modes, the set of selected cells can be retrieved using
            setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
            setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

            // Get the min and max ranges of selected cells
            int rowIndexStart = getSelectedRow();
            int rowIndexEnd = getSelectionModel().getMaxSelectionIndex();
            int colIndexStart = getSelectedColumn();
            int colIndexEnd = getColumnModel().getSelectionModel().getMaxSelectionIndex();

            // Check each cell in the range
            for (int r = rowIndexStart; r &lt = rowIndexEnd; r++)
            {
                for (int c = colIndexStart; c &lt = colIndexEnd; c++)
                {
                    if (isCellSelected(r, c))
                    {
                        // cell is selected
                    }
                }
            }
        }
    }

...