seleccionada - Botón de palanca de oscilación de Java para filtrar filas jtable
rowfilter java (2)
La primera es que no tengo ni idea de cómo escribir un filtro cuando hay que filtrar por objeto en lugar de por primitiva.
¿ RowFilter
API de RowFilter
? Muestra un ejemplo de cómo crear un filtro personalizado basado en un Objeto personalizado.
En segundo lugar, no tengo idea de cómo conectar dicho filtro al botón de alternar para poder encenderlo y apagarlo.
¿Has leído el tutorial e intentado ejecutar la demostración? El tutorial usa un DocumentFilter para cambiar el filtro de forma dinámica cada vez que el usuario cambia el texto en el campo de texto. Entonces, el tutorial le muestra cómo cambiar dinámicamente el filtro según la entrada del usuario. Puede modificar el código para cambiar el filtro cada vez que se presiona el botón de alternar.
contiene un AbstractTableModel personalizado que devuelve un objeto cuando se llama getValueAt. Y, por supuesto, tengo un TableCellRenderer personalizado que es capaz de obtener / construir el texto del objeto para que pueda mostrarse.
No relacionado con mi respuesta, pero realmente no entiendo esa afirmación. ¿Estás diciendo que cada celda en el modelo devuelve un objeto diferente, o cada celda devuelve el mismo objeto pero solo muestra una propiedad diferente del objeto para column1, column2, column3, etc.? De cualquier manera, parece un diseño extraño. Probablemente podamos sugerir algo mejor. Publique su SSCCE que demuestre el problema.
Tengo una JTable
, contiene un AbstractTableModel
personalizado que devuelve un objeto cuando se llama getValueAt
. Y, por supuesto, tengo un TableCellRenderer
personalizado que es capaz de obtener / construir el texto del objeto para que pueda mostrarse.
Sin embargo, ahora me gustaría escribir un filtro. El filtro será un simple botón de alternar. Cuando esté encendido, me gustaría que se aplique el filtro y cuando esté apagado, me gustaría que se elimine el filtro.
Tengo dos problemas debido a eso.
La primera es que no tengo ni idea de cómo escribir un filtro cuando hay que filtrar por objeto en lugar de por primitiva.
En segundo lugar, no tengo idea de cómo conectar dicho filtro al botón de alternar para poder encenderlo y apagarlo.
Lamento si esta es una pregunta retrasada, pero http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#sorting fue la documentación más inútil que vi porque la explicación no era exhaustiva.
Gracias a todos por su ayuda.
EDITAR: el objeto contiene múltiples campos, pero estoy interesado en dos alternadores de filtro específicamente. Uno devuelve un valor boolean
cuando digo isSuper
, y el segundo devuelve una string
cuando llamo getName
. Si el primer alternar está activado, debe mostrar todas las entradas que devuelvan verdadero en isSuper
, y el segundo alternar debería mostrar todas las entradas cuyo nombre está comprometido de dos palabras (hay espacio) cuando llamo getName
.
Para ser honesto, los JavaDocs lo deletrean bastante bien ...
Con tan poca información para continuar, lo mejor que puede esperar es una visión general ...
TableRowSorter<TableModel> trs = new TableRowSorter<TableModel>();
table.setRowSorter(trs);
// Create the row filder...
trs.setRowFilter(new RowFilter<TableModel, Integer>() {
@Override
public boolean include(RowFilter.Entry<? extends TableModel, ? extends Integer> entry) {
boolean include = false;
// Returns the value for the specific column...
CustomObject value = (CustomObject)entry.getValue(filterColumn);
if (filterBySuper) {
include = value.isSuper();
} else {
include = value.getName().startsWith(fistPart) && value.getName().endWith(lastPart);
}
return include;
}
});
Cuando desee actualizar el filtro, simplemente necesita llamar ...
trs.sort();