Добавить ActionListener в заголовок столбца JTable

Можно ли добавить ActionListener в заголовок столбца для JTable.

Вот моя таблицаМоя таблица

Теперь я хочу добавить ActionListener в заголовки столбцов (например, WQE, SDM). Я хотел бы иметь возможность отображать описание столбца в другом окне.


person Parag    schedule 03.04.2012    source источник
comment
См. также этот Вопросы и ответы.   -  person trashgod    schedule 03.04.2012


Ответы (2)


Смотрите полностью рабочий пример ниже

  • добавить MouseListener в заголовок столбца
  • используйте table.columnAtPoint(), чтобы узнать, какой заголовок столбца был нажат

Код:

// example table with 2 cols
JFrame frame = new JFrame();
final JTable table = new JTable(new DefaultTableModel(new String[] {
        "foo", "bar" }, 2));
frame.getContentPane().setLayout(
        new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
frame.getContentPane().add(table.getTableHeader());
frame.getContentPane().add(table);
frame.pack();
frame.setVisible(true);

// listener
table.getTableHeader().addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        int col = table.columnAtPoint(e.getPoint());
        String name = table.getColumnName(col);
        System.out.println("Column index selected " + col + " " + name);
    }
});
person Adam    schedule 03.04.2012
comment
+1 Это подход, предложенный в руководстве и проиллюстрированный здесь. - person trashgod; 02.08.2012
comment
отличный! я никогда не понимал, что событие mouseclicked в заголовке лучше, чем события в таблице.: D - person gumuruh; 09.10.2017

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

private class MyMouseAdapter extends MouseAdapter {

    public void mousePressed(MouseEvent e) {

        if (table.equals(e.getSource())) {

            int colIdx = table.columnAtPoint(e.getPoint());
            int rowIdx = table.rowAtPoint(e.getPoint());
Object obj = table.getModel().getValueAt(rowIdx, colIdx) ;//This gets the value in the cells
           String str = obj.toString();//This converts that Value to String
           JTextField somefield = new JTextField();//Choose a JTextField
           somefield.setText(str);//Populates the Clicked value to the JTextField

            System.out.println("Row: " + rowIdx + " " + "Colulmn: " + colIdx);
        }
        else if (header.equals(e.getSource())) {

            int selectedColumnIdx = header.columnAtPoint(e.getPoint());
            String colName = table.getColumnName(header.columnAtPoint(e.getPoint()));

            System.out.println("Column Name: " + colName);
            System.out.println("Selected Column: " + selectedColumnIdx);
        }
    }
}

Исправьте пример кода по своему вкусу и предпочтениям;

person ErrorNotFoundException    schedule 02.08.2012
comment
Лучше использовать ListSelectionListener для самой таблицы. Слушатель заголовка повторяет гораздо более ранний ответ @Adam. - person trashgod; 02.08.2012