Не выбирая строку в JTable

У меня есть JTable с количеством строк, каждая строка состоит из нескольких JPanels. Я хочу, чтобы одна из строк в JTable не была выбрана. Я использовал:

panel.setFocusable(false);

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

1 ответ

Вы можете достичь этого с помощью ListSelectionListener, Прочитайте больше Как написать слушателя выбора списка. Простой пример:

import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;


public class TestFrame extends JFrame{
    private int notSelectable = 2;
    private JTable t1;

    public TestFrame(){
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        init();
        pack();
        setVisible(true);
    }

    private void init() {
      t1 = new JTable(10,1);
      t1.getSelectionModel().addListSelectionListener(getListener());
      t1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
      add(t1);
    }


    private ListSelectionListener getListener() {
        return new ListSelectionListener() {

            @Override
            public void valueChanged(ListSelectionEvent e) {
                if(t1.getSelectedRow() == notSelectable){
                    if(notSelectable+1 == t1.getRowCount()){
                        t1.getSelectionModel().setSelectionInterval(0, 0);
                    } else {
                        t1.getSelectionModel().setSelectionInterval(notSelectable+1, notSelectable+1);
                    }
                }
            }
        };
    }

    public static void main(String... strings) {
        new TestFrame();
    }

}
Другие вопросы по тегам