Pregunta

I tienen una serie de JXTables que todos tienen las mismas columnas (pero diferentes de datos). Puede ordenar los datos haciendo clic en uno de la cabecera de una de las columnas. Lo que quiero ahora, es que las otras tablas se clasifican de la misma manera cuando se hace clic en el encabezado de una de la tabla.

¿Fue útil?

Solución

Se puede definir una clase de mediador que hace referencia a JTable de cada RowSorter y registra a sí mismo como un RowSorterListener con cada clasificador. Cuando un clasificador dados los cambios que podría recuperar su lista actual de claves de ordenación utilizando getSortKets() y pasarlos a todos los demás utilizando setSortKeys(List<? extends SortKey>) clasificador.

Ejemplo

En primer lugar definimos la clase 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) {
    ...
  }
}

Ahora ponemos en práctica sorterChanged(RowSorterEvent e) para responder a un evento determinado clasificador:

  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);
        }
      }
    }
  }

Otros consejos

Yo no haría eso, porque toma el control lejos del usuario:. S / él puede querer tener las tablas ordenadas de manera diferente, para comparar las diferentes piezas de datos

En su lugar, añadir un "Ordenar por" opción de menú Ver. El cambio de esta opción va a clasificar todas las tablas, pero luego dejarlos solos a menos que el usuario desea ordenar una tabla específica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top