Mudar cor dar linha ao passar o mouse e juntamente manter outra selecionada [RESOLVIDO]
4 respostas
R
Richel_Sensineli
Bom dia pessoal! Como estão?
Sou iniciante em linguagem OO, e ainda mais em Java, comecei no mercado agorinha! kk
Então, no momento estou precisando saber como posso implementar uma função que:
Mude a cor da linha de um grid (tabela) ao selecioná-la
e ao passar o mouse, mude a cor da linha, mas mantem a outra, se houver, selecionada
Abaixo um exemplo que muda a cor da linha com a passagem do mouse e quando a linha é selecionada.
importjavax.swing.*;importjava.awt.*;importjavax.swing.table.*;importjava.awt.event.*;publicclassTesteextendsJFrame{privateintlinhaMouse=-1;privateJTabletabela;publicTeste(){super("Exemplo de uma tabela simples");String[]colunas={"Cidade","Estado","Habitantes"};Object[][]conteudo={{"Goiânia","GO","43.023.432"},{"São Paulo","SP","5.343.234"},{"Rio de Janeiro","RJ","6.434.212"},{"Jussara","GO","87.454"},{"Barra do Garças","MT","64.344"}};tabela=newJTable(conteudo,colunas);tabela.setPreferredScrollableViewportSize(newDimension(350,100));//listener para detectar o movimento do mouseListenerTabelalt=newListenerTabela();tabela.addMouseMotionListener(lt);this.addMouseMotionListener(lt);//renderer para desenhar a tabela RendererMouserm=newRendererMouse();tabela.getColumn("Cidade").setCellRenderer(rm);tabela.getColumn("Estado").setCellRenderer(rm);tabela.getColumn("Habitantes").setCellRenderer(rm);Containerc=getContentPane();c.setLayout(newFlowLayout());JScrollPanescrollPane=newJScrollPane(tabela);c.add(scrollPane);setSize(400,300);setVisible(true);}publicstaticvoidmain(Stringargs[]){Testeapp=newTeste();app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//este listener detecta o movimento do mouse e armazena a linhaclassListenerTabelaextendsMouseMotionAdapter{publicvoidmouseMoved(MouseEvente){if(e.getSource()==tabela){linhaMouse=tabela.rowAtPoint(e.getPoint());}else{linhaMouse=-1;//linha -1 significa que o mouse está fora da tabela}tabela.repaint();}}classRendererMouseimplementsTableCellRenderer{publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,booleanisSelected,booleanhasFocus,introw,intcolumn){Componentresult=table.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);if(isSelected){result.setForeground(Color.white);result.setBackground(Color.blue);//linha em que o mouse passou}elseif(row==linhaMouse){result.setForeground(Color.black);result.setBackground(Color.orange);}else{result.setForeground(Color.black);result.setBackground(Color.white);}returnresult;}}}
R
Richel_Sensineli
Noossa, era disso mesmo que eu precisava!! :shock:
Muito obrigado al.barbosa!!
Abs.
M
mspereira
Ótimo!
Já precisei desse “efeito” e nunca encontrei um exemplo tão perfeito quanto esse.
Vi um monte de exemplos, aprendi um monte de coisa, mas faltava o código das linhas 28, e 74 até 85.
Valeu!
A
al.barbosa
Richel Sensineli:
Noossa, era disso mesmo que eu precisava!! :shock:
Muito obrigado al.barbosa!!