Удаление выбранного индекса JList

Итак, у меня есть JList в моей программе, и он начинается с выбранного индекса 0. Однако во время программы я хочу сделать myJList.setSelectedIndex(-1) или что-то в этом роде, чтобы ничего не было выбрано? Надеюсь, я был понятен. Спасибо


person Cemre Mengü    schedule 30.12.2011    source источник


Ответы (2)


JList имеет метод для очистки выделения. См. JList#clearSelection. Проверьте JList#getSelectionModel и API ListSelectionModel для определения доступных методов. изменить выбор

Изменить: поскольку вы указали, что это не работает, я создал SSCCE, показывающий, что clearSelection работает, как и ожидалось.

public class Test {
  public static void main( String[] args ) {
    try {
      SwingUtilities.invokeAndWait( new Runnable() {
        public void run() {
          JFrame frame = new JFrame( "TestFrame" );
          frame.getContentPane().setLayout( new BorderLayout(  ) );
          DefaultListModel listModel = new DefaultListModel();
          listModel.addElement("Jane Doe");
          listModel.addElement("John Smith");
          listModel.addElement("Kathy Green");
          final JList list = new JList( listModel );
          list.setSelectedIndex( 0 );
          frame.getContentPane().add( list, BorderLayout.CENTER );
          JButton clearSelectionButton = new JButton( "Clear selection" );
          frame.getContentPane().add( clearSelectionButton, BorderLayout.SOUTH );

          clearSelectionButton.addActionListener( new ActionListener() {
            public void actionPerformed( ActionEvent aActionEvent ) {
              list.clearSelection();
            }
          } );

          frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
          frame.pack();
          frame.setVisible( true );
        }
      } );
    } catch ( InterruptedException e ) {
    } catch ( InvocationTargetException e ) {
    }
  }
}
person Robin    schedule 30.12.2011
comment
РЕДАКТИРОВАТЬ: Плохо, что это работает, была еще одна ошибка. почему-то не работает clearSelection. Ничего не происходит, когда я вызываю метод (по крайней мере, видимым образом). тот же элемент списка по-прежнему остается выделенным. - person Cemre Mengü; 30.12.2011
comment
поэтому моя проблема в том, что для списка существует событие valueChanged, и я думаю, что clearSelection запускает его, что приводит к исключению нулевого указателя. - person Cemre Mengü; 30.12.2011

Как насчет:

SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            jList.clearSelection();
        }
}

Другой путь:

    jButton1.addActionListener(
        (ActionListener)EventHandler.create(ActionListener.class, jList1, "clearSelection"));
person Joop Eggen    schedule 30.12.2011
comment
Да, и я пропустил этот метод, даже просматривая список методов один за другим :) Спасибо. Поскольку Робин был первым, я поставлю ему галочку, надеюсь, вы не возражаете (хотя я даю вам плюс) - person Cemre Mengü; 30.12.2011