У меня есть Jtable с кнопкой в ​​одном из столбцов, и я хочу получить доступ к значению в 1-м столбце, когда я нажимаю кнопку - PullRequest
1 голос
/ 11 мая 2019

У меня есть JTable с 3 столбцами: ID, имя и операция. В этом последнем столбце у меня есть кнопка для каждой строки (я опубликую экран печати). Когда я нажимаю кнопку, я хочу получить доступ к значению в первом столбце. Я сделал прослушиватель таблицы, и он работает, когда я нажимаю на таблицу, но если я нажимаю на кнопку (которая находится в 3-м столбце), она не получает значение (я предполагаю, что это потому, что щелчок не прямо в jtable).

Как получить значение при нажатии кнопки?

Спасибо

печать экрана функции JTable

Слушатель, которого я сделал:

table.addMouseListener(new MouseAdapter() {
          @Override
            public void mouseClicked(final MouseEvent e) {
                if (e.getClickCount() == 1) {
                    final JTable jTable= (JTable)e.getSource();
                    final int row = table.getSelectedRow();
                    final int column = table.getSelectedColumn();
                    final int valueInCell = (Integer)table.getValueAt(row, 0);
                    setSelectedID(valueInCell);
                    System.out.println("Selecionou: "+valueInCell);
                }
            }
    });

1 Ответ

0 голосов
/ 11 мая 2019

Вместо добавления обычных JButton s к вашему столу вы можете добавить свой собственный JButton; который будет реализовывать ActionListener с желаемым поведением при нажатии (получить data), а во время построения:

  1. Получите (в качестве аргумента) и сохраните data, на который вы хотите сослаться, в поле.
  2. Регистрируется как ActionListener.

Такой кастом JButton будет выглядеть так:

public class DataButton<T> extends JButton implements ActionListener {

    private T data;

    public DataButton(T data) {
        this.data = data;
        addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        System.out.println("Selection: " + getData());
    }

    public T getData() {
        return data;
    }
}
...