java - sobre - manual android studio avanzado
Java Swing: mostrando la información sobre herramientas en JTable según el texto debajo del puntero del mouse (1)
Reemplace el getToolTipText(MouseEvent)
del componente que devuelve TableCellRenderer
. Si está extendiendo DefaultTableCellRenderer
que extiende JLabel
y se devuelve a sí mismo como componente de renderizado, puede anularlo directamente en su subclase.
Debería poder determinar en qué línea el puntero del mouse está utilizando MouseEvent#getPoint()
. Consulte JTextComponent#viewToModel
o JTextArea#getLineOfOffset
(si está utilizando un JTextArea
para representar en lugar de un JLabel
).
Tengo una JTable donde visualizo algunos datos de cadena formateados usando html. Necesito mostrar una información sobre herramientas basada en el texto debajo del puntero del mouse
Al pasar el mouse sobre "Line1" y "Line2", necesito mostrar diferentes consejos sobre herramientas. ¿Hay alguna manera de lograr esto o tengo que usar un renderizador personalizado para representar cada línea con una celda y mostrar la información de la herramienta en función de eso?
Aquí está el código de muestra para crear la tabla
package com.sample.table;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.*;
public class SampleTable {
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("SampleTable");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createTablePanel(), BorderLayout.CENTER);
//Display the window.
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static JPanel createTablePanel(){
JPanel tablePanel = new JPanel();
JTable table = createTable();
table.setFillsViewportHeight(true);
table.setRowHeight(45);
addListener(table);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setPreferredSize(new Dimension(300, 120));
tablePanel.add(scrollPane);
return tablePanel;
}
private static void addListener(JTable table) {
table.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent e) {
if(e.getSource() instanceof JTable){
JTable table = (JTable)e.getSource();
table.setToolTipText("Some tooltip");
}
}
@Override
public void mouseDragged(MouseEvent e) {
// do nothing
}
});
}
public static JTable createTable(){
String[] columnNames = {"Column1", "Column2"};
Object[][] data = {{"1", "<html>Line1<br/>Line2</html>"},
{"2", "<html>Line1<br/>Line2</html>"}};
JTable table = new JTable(data, columnNames);
return table;
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}