Сортировка столбцов JXTable меняется между 1.0 и 1.6

Недавно я обновил библиотеку SwingX в приложении с версии 1.0 до 1.6.2, так как мы обновились до JDK1.6. Я знаю, что сортировка была изменена для повторного использования некоторых компонентов Core JDK, представленных в JDK 1.6.

Однако в версии 1.0 можно было отсортировать столбец, щелкнув заголовок, последующие щелчки вернули порядок сортировки, а Shift щелкнул сортировку и вернул исходный порядок. После обновления до версии 1.6.2 поведение щелчка Shift больше не присутствует.

Небольшой образец

import org.jdesktop.swingx.JXTable;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import java.awt.EventQueue;

public class JXTableSortingTest {
  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      public void run() {
        initUI();
      }
    } );
  }

  private static void initUI(){
    JFrame testFrame = new JFrame( "TestFrame" );
    JXTable table = new JXTable(  );
    DefaultTableModel model =
        new DefaultTableModel( new Object[][]{ new Object[]{"A"}, new Object[]{"B"}, new Object[]{"C"}, new Object[]{"D"}, new Object[]{"E"} }, new Object[]{"Click me"} );
    table.setModel( model );

    testFrame.getContentPane().add( new JScrollPane( table ) );

    testFrame.pack();
    testFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    testFrame.setVisible( true );
  }
}

Запуск этого примера с версией 1.0 позволяет удалить сортировку столбцов щелчком мыши по заголовку, а с версией 1.6.2 это больше не работает.

Я проверил документы, но ничего не нашел, чтобы снова включить это поведение. Поэтому, прежде чем я начну добавлять эту функцию, я хотя и спросил ее здесь, знает ли кто-нибудь простой способ повторно ввести поведение Shift-щелчка.


person Robin    schedule 02.03.2012    source источник


Ответы (1)


он не поддерживается, по крайней мере, не так, как в 1.0.

Ближайшее, что вы можете сделать с поддержкой по умолчанию, - это установить свойство sortOrderCycle в JTable, тогда повторные щелчки будут циклически проходить через эти состояния для столбца, по которому щелкнули:

table.setSortOrderCycle(ASCENDING, DESCENDING, UNSORTED);

Это отличается от старого поведения тем, что старая удаленная сортировка all — если вам это нужно, можно использовать настраиваемый mouseListener, который сбрасывает ключи сортировки.

Кроме того, вы можете рассмотреть возможность подачи запроса на функцию в трекере SwingX и начать обсуждение на форуме SwingLabs: основной причиной, по которой мы решили отказаться от этого, было соответствие основному поведению. А так как никто не гавкнул, так и осталось :-)

person kleopatra    schedule 02.03.2012