[Dúvida] Adicionar Tooltip às linhas de uma JTable!
2 respostas
Nicolas_Fernandes
Olá, galerinha do GUJ!
Tudo beleza?
Estou em um projeto, e me surgiu a seguinte dúvida:
Eu quero que, ao passar o mouse sobre uma linha de minha JTable, uma Tooltip apareça sobre aquela linha, exibindo uma informação qualquer.
Para isso, deve-se usar o evento mouseEntered, da interface MouseListener.
Até aí tudo bem, mas… Como devo fazer para essa Tooltip aparecer sobre a linha na qual passei o mouse?
Não use o MouseEntered, que isso não funciona. Em vez disso, você tem de mudar o TableCellRenderer. Vou dar um exemplo se tiver tempo.
E
entanglement
packageguj;importjava.awt.BorderLayout;importjava.text.DateFormat;importjava.text.DecimalFormat;importjava.text.Format;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swing.SwingUtilities;importjavax.swing.table.AbstractTableModel;importjavax.swing.table.DefaultTableCellRenderer;classPair<T,U>{publicTfirst;publicUsecond;publicPair(Tt,Uu){first=t;second=u;}}publicclassExemploJTableTooltipextendsJFrame{staticclassCliente{privateStringnome;privateStringendereco;privateintid;privateDatedata;publicCliente(finalStringnome,finalStringendereco,finalintid,finalDatedata){this.nome=nome;this.endereco=endereco;this.id=id;this.data=data;}publicStringgetNome(){returnnome;}publicStringgetEndereco(){returnendereco;}publicintgetId(){returnid;}publicDategetData(){returndata;}}staticclassTabelaClienteModelextendsAbstractTableModel{publicTabelaClienteModel(List<Cliente>clientes){this.clientes=clientes;}@OverridepublicintgetColumnCount(){return2;}@OverridepublicintgetRowCount(){returnclientes.size();}@OverridepublicObjectgetValueAt(introwIndex,intcolumnIndex){switch(columnIndex){case0:returnnewPair<String,String>(clientes.get(rowIndex).getNome(),clientes.get(rowIndex).getEndereco());case1:returnnewPair<Integer,Date>(clientes.get(rowIndex).getId(),clientes.get(rowIndex).getData());default:returnnull;}}privateList<Cliente>clientes;}staticclassPairTableCellRendererextendsDefaultTableCellRenderer{publicPairTableCellRenderer(){super();}publicPairTableCellRenderer(Formatf1,Formatf2){super();this.f1=f1;this.f2=f2;}@OverrideprotectedvoidsetValue(Objectvalue){Strings;if(value==null)s="";elseif(valueinstanceofPair<?,?>){@SuppressWarnings("unchecked")Pairv=(Pair)value;if(f1==null)s=v.first.toString();elses=f1.format(v.first);if(f2==null)setToolTipText(v.second.toString());elsesetToolTipText(f2.format(v.second));}else{s=value.toString();}setText(s);}privateFormatf1;privateFormatf2;}privatestaticfinallongserialVersionUID=1L;privateJPaneljContentPane=null;privateJScrollPanescpTabela=null;privateJTabletblTabela=null;privateJScrollPanegetScpTabela(){if(scpTabela==null){scpTabela=newJScrollPane();scpTabela.setViewportView(getTblTabela());}returnscpTabela;}privateJTablegetTblTabela(){if(tblTabela==null){tblTabela=newJTable(newTabelaClienteModel(clientes));tblTabela.getColumnModel().getColumn(0).setCellRenderer(newPairTableCellRenderer());tblTabela.getColumnModel().getColumn(1).setCellRenderer(newPairTableCellRenderer(newDecimalFormat("#,##0"),newSimpleDateFormat("dd/MM/yyyy")));}returntblTabela;}publicstaticvoidmain(String[]args){SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){ExemploJTableTooltipthisClass=newExemploJTableTooltip();thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);thisClass.setVisible(true);}});}publicExemploJTableTooltip(){super();initialize();}privatevoidinitialize(){this.setSize(300,200);this.setContentPane(getJContentPane());this.setTitle("Exemplo JTable com Tooltip");try{DateFormatdf=newSimpleDateFormat("dd/MM/yyyy");clientes.add(newCliente("Luis Inacio","Palacio da Alvorada",123456,df.parse("01/04/2010")));clientes.add(newCliente("Nicolas Sarkozy","Palais de l'Élysée",789102,df.parse("02/04/2010")));clientes.add(newCliente("Barack Obama","White House",1288388,df.parse("03/04/2010")));}catch(ParseExceptionex){}}privateJPanelgetJContentPane(){if(jContentPane==null){jContentPane=newJPanel();jContentPane.setLayout(newBorderLayout());jContentPane.add(getScpTabela(),BorderLayout.CENTER);}returnjContentPane;}privateList<Cliente>clientes=newArrayList<Cliente>();}