Pergunta

Eu tenho vários jxtables que têm as mesmas colunas (mas dados diferentes). Você pode classificar os dados clicando em um cabeçalho de uma das colunas. O que eu quero agora é que as outras tabelas são classificadas da mesma maneira ao clicar no cabeçalho de uma das mesas.

Foi útil?

Solução

Você pode definir uma classe mediadora que faz referência a cada JTable's RowSorter e se registra como um RowSorterListener com cada classificador. Quando um determinado classificador muda, você pode recuperar sua lista atual de teclas de classificação usando getSortKets() e passe -os para qualquer outro classificador usando setSortKeys(List<? extends SortKey>).

Exemplo

Primeiro, definimos a aula de mediador:

public class SortMediator implements RowSorterListener {
  private final List<RowSorter> sorters;
  private boolean changing;

  public void addRowSorter(RowSorter sorter) {
    this.sorters.add(sorter);
  }

  public void sorterChanged(RowSorterEvent e) {
    ...
  }
}

Agora implementamos sorterChanged(RowSorterEvent e) Para responder a um determinado evento de classificação:

  public void sorterChanged(RowSorterEvent e) {
    // The changing flag prevents an infinite loop after responding to the inital
    // sort event.
    if (!changing) {
      changing = true;

      RowSorter changedSorter = e.getSource();
      List<? extends SortKey> keys = changedSorter.getKeys();

      for (RowSorter sorter : sorters) {
        if (sorter != changedSorter) {
          // Install new sort keys, which will cause the sorter to re-sort.
          // The changing flag will prevent the mediator from reacting to this.
          sorter.setSortKeys(keys);
        }
      }
    }
  }

Outras dicas

Eu não faria isso, porque retira o controle do usuário: ele pode querer ter as tabelas classificadas de maneira diferente, para comparar diferentes dados.

Em vez disso, adicione uma opção "classificar por" ao seu menu de exibição. Alterar essa opção classificará todas as tabelas, mas as deixe em paz, a menos que o usuário queira classificar uma tabela específica.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top