Вся строка не выделяется в JTable - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь выбрать всю строку из jtable. В первый раз выделяется вся строка, но со следующего раза выделяется только несколько ячеек, хотя получаются данные всей строки.

Код:

        jDelete.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if(!jtable.getSelectionModel().getValueIsAdjusting())
                deleteRow(jtable.getSelectedRow());

        }
    });

jtable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

        @Override
        public void valueChanged(ListSelectionEvent e) {
            if(!e.getValueIsAdjusting()){
                jtable.setRowSelectionAllowed(true);
                String[] arr = new String[9];
                int row = jtable.getSelectedRow();
                if(row!=-1){
                for(int i=0;i<9;i++){
                    arr[i] = (String) jtable.getValueAt(row, i);
                }
                jId.setText(arr[0]);
                jName.setText(arr[1]);
                jTime.setSelectedItem(arr[2]);
                jMail.setText(arr[3]);
                jMobile.setText(arr[4]);
                jCourse.setSelectedItem(arr[5]);
                jFee.setText(arr[6]);
                jPaid.setText(arr[7]);
                jBalance.setText(arr[8]);
            }
            }
        }
    });

Когда я пытаюсь выбрать строку и удалить ее, в первый раз она удаляется правильно. Со следующего раза, когда я нажимаю на строку, несколько ячеек отображаются как выбранные, но получается вся строка. Как сделать так, чтобы отображалась вся выбранная строка?

Первый раз: вся строка выбрана правильно. [! [введите описание изображения здесь] [1]] [1]

Второй раз: вся строка выделена не полностью.

[! [Введите описание изображения здесь] [1]] [1]

Весь код размещен здесь:

https://ideone.com/7EJiRQ

1 Ответ

0 голосов
/ 04 июля 2018
jtable.setRowSelectionAllowed(true);

Не устанавливайте это свойство в слушателе выбора. Это поведение по умолчанию при создании таблицы. Поэтому приведенный выше код не нужен.

    public void actionPerformed(ActionEvent e) {
        if(!jtable.getSelectionModel().getValueIsAdjusting())
            deleteRow(jtable.getSelectedRow());

Почему вы проверяете модель выбора в ActionListener. Там нет необходимости делать это. Строка уже будет выделена при нажатии кнопки.

Однако код должен выглядеть примерно так:

int row = jtable.getSelectedRow();
if (row != -1)
    deleteRow( row );

Это обеспечит выбор строки перед попыткой ее удаления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...