Bordas de Jtable

4 respostas
Alchemist

Boa Tarde pessoal,

To precisando muito de ajuda, eu tenho uma Jtable e gostaria de personalizar as bordas de cada linha, eu achei este exemplo aqui:

Porem não consegui ajeitar no meu modelo de tabela, acho que deve ter alguma coisa mais simples… se alguem puder me ajudar :stuck_out_tongue:

To precisando muito disto…

4 Respostas

T

Você queria deixar sua JTable como se fosse uma planilha Excel, não?

Isso é mais complicado que parece. Se você quiser uma coisa legal mas não tão sofisticada, você pode usar a JXTable ou então a ETable.

Eder_Peixoto

Você precisa alterar o Renderer das células do JTable.

Não é muito complicado, sendo necessário implementar apenas um método que será responsável por retornar um Component a ser apresentado em cada célula.

Alchemist

Eder foi isto mesmo que eu fiz, se vc poder da uma olhada para ver se é a melhor forma de fazer e esta tudo certo eu ficaria agradecido:

O Renderer esta pintando uma linha e mudando a borda, setando um focus e colocando uma mascara de moeda

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.text.NumberFormat;

import javax.swing.BorderFactory;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.border.SoftBevelBorder;
import javax.swing.table.DefaultTableCellRenderer;

public class BorderCellRenderer extends DefaultTableCellRenderer{

	private NumberFormat formatter = NumberFormat.getCurrencyInstance();
	
	public Component getTableCellRendererComponent(JTable table, Object value,
                 boolean isSelected, boolean hasFocus, int row, int column) {
		
		 setFont(new java.awt.Font("Lucida Sans", 0, 12 ));  
	 	 setBorder(new SoftBevelBorder(SoftBevelBorder.RAISED));
	 	
	 	 if(row != 2){
	    	 setBackground(new Color(244, 242, 228));
	     }else{ 
	    	setBorder(BorderFactory.createLineBorder(Color.GREEN));
	        setBackground(Color.GREEN);
	     }

	 	if (hasFocus){
    		setBackground(new Color(230,230,250));
    	}
	 	 
	    if(value != null){
    		formatter.setMaximumFractionDigits(2);
    		setText(formatter.format(value));
    		setFont(new Font("helvetica",Font.ROMAN_BASELINE,11));
    		setHorizontalAlignment(SwingConstants.RIGHT);
    	}else{
    		setText("");   
    	} 
    	
	return this;
	}
  
}

Eu queria saber como eu posso setar por exemplo só as de cima de uma celula ? Eu vi que tem um metodo acho que é o insets… mais eun consegui fazer funcionar… se tiver algum exemplo simples e poder passar…

Eder_Peixoto

Olá!

Realmente a melhor maneira é extendendo a classe DefaultTableModel.
Para bordas personalizadas, quando as classes da API do Java não satisfazem o teu interesse, é só extender a classe abstrata AbstractBorder, onde será necessário implementar o método paintBorder.

Abaixo consta um exemplo para mostrar apenas a borda inferior:

package pacotes.utilitarios.swing.border;

import java.awt.Component;
import java.awt.Graphics;
import javax.swing.border.AbstractBorder;

/**
 * Constroi uma borda para uso em links.
 * @author Eder Peixoto
 * @version 1.01 - 20/04/2009.
 */
public class LinkBorder extends AbstractBorder{
    /**
     * Pinta uma borda apenas por baixo do componente, na mesma <code>Color</code> do foreground
     *do <code>component</code>.
     * @param c the component for which this border is being painted
     * @param g the paint graphics
     * @param x the x position of the painted border
     * @param y the y position of the painted border
     * @param width the width of the painted border
     * @param height the height of the painted border
     */
    @Override
    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height){
        g.setColor( c.getForeground() );
        g.drawLine(0, height - 1, width, height - 1);       //Border Bottom
    }//Fim do metodo.
}//Fim da classe.

Note que é muito simples mudar a borda. A borda que você criar será utilizada na implementação do método getTableCellRendererComponent, na invocação do método setBorder.

Qualquer dúvida, é só perguntar.

Criado 16 de julho de 2009
Ultima resposta 20 de jul. de 2009
Respostas 4
Participantes 3