java - ordenar - Texto de información sobre herramientas para cada columna de un encabezado JTable
rowfilter java (2)
Consulte la sección del tutorial de Swing en Especificación de información sobre herramientas para encabezados de columnas .
Recomendaría este enfoque porque cada LAF podría tener su propio renderizador personalizado, por lo que extender el renderizador predeterminado no funcionará para todas las LAF.
El encabezado de la tabla de Windows es diferente del encabezado de la tabla MAC que es diferente al encabezado de la tabla Nimbus.
¿Está diciendo crear mi propio TableHeader?
Está anulando el código que crea JTableHeader
para que pueda anular el getToolTipText(MouseEvent)
de JTableHeader para que pueda proporcionar su propia información sobre herramientas en función de la ubicación del mouse. El código de ejemplo simplemente obtiene la información sobre herramientas de una matriz.
¿Todavía podría usar el texto debajo del mouse como información sobre herramientas?
Si quiere el texto del encabezado, necesita obtener TableColumnModel
de JTableHeader, luego obtener TableColumn
y luego usar getHeaderValue()
para obtener el texto del encabezado de la columna.
Intento mostrar el texto en cada celda del encabezado como información sobre herramientas cuando pasa el mouse sobre esa celda.
Descubrí que puede configurar la información sobre herramientas para todo el encabezado: table.getTableHeader().setToolTipText("asdf");
pero no puede hacer lo mismo para cada celda, como por ejemplo: table.getTableHeader().getColumnModel().getColumn(0).setToolTipText("asdf");
He visto esta pregunta pero no puedo entender cómo anular getToolTipText
cuando el único método en TableCellRenderer es getTableCellRendererComponent
.
La única clase que he encontrado que tiene este getToolTipText es JComponent
Me encontré con esto ya que era similar a lo que necesitaba, quería poner información sobre herramientas para los encabezados de las columnas. El ejemplo de demostración de Oracle vinculado por camickr habilitó información sobre herramientas mediante código adicional en la creación de JTable. Ese ejemplo me guió en la dirección correcta, y lo hice funcionar de manera similar, pero esa forma de hacerlo fue inicializando una nueva JTable cada vez que se actualizó la tabla. Antes, solo estaba usando myJTable.setModel () para actualizar la tabla. Además, el ejemplo de Oracle parecía desordenado y confuso por un tiempo allí. No necesité extender AbstractTableModel ya que no parecía afectar a nada la información sobre herramientas.
Entonces, ¿cómo podría obtener información de herramientas del encabezado de columna sin hacer una nueva JTable cada vez y sin el problema? El código crucial en la inicialización de JTable estaba anulando un método en el JTable "JTableHeader protected createDefaultTableHeader ()" que, por supuesto, permite un encabezado de tabla (JTableHeader) con información sobre herramientas. El JTableHeader es en lo que realmente quería trabajar.
Lo que hice fue crear una nueva clase que extendiera JTableHeader para que incluyera una información sobre herramientas String array en el constructor y un método getToolTipText () (igual que en el ejemplo, excepto sin la punta de la cadena), y luego hice myJTable.setTableHeader ( ) para establecerlo en una instancia de mi nueva clase que tiene la información sobre herramientas String array.
(Estoy publicando esto como una respuesta ya que es demasiado complicado para un comentario, pero podría ser útil para otros)
Aquí está el código en mi clase de GUI cuando actualizo la tabla-
myJTable.setModel(new javax.swing.table.DefaultTableModel(
tableData,
colHeader
));//setting the new data and col headers! (no tooltips yet)
MyTableHeader headerWithTooltips = new MyTableHeader(myJTable.getColumnModel(), colHeaderTooltips);//make a new header that allows for tooltips
myJTable.setTableHeader(headerWithTooltips);//use that header in my table
Y aquí está mi clase MyTableHeader-
class MyTableHeader extends JTableHeader {
String[] tooltips;
MyTableHeader(TableColumnModel columnModel, String[] columnTooltips) {
super(columnModel);//do everything a normal JTableHeader does
this.tooltips = columnTooltips;//plus extra data
}
public String getToolTipText(MouseEvent e) {
java.awt.Point p = e.getPoint();
int index = columnModel.getColumnIndexAtX(p.x);
int realIndex = columnModel.getColumn(index).getModelIndex();
return this.tooltips[realIndex];
}
}