JTable - Centralizar o conteúdo de uma célula

10 respostas
R

Bom dia !!

Alguem sabe como centralizar o conteúdo das células numa JTable ?

10 Respostas

von.juliano
Vc tem que implemetar um Renderer pra célula:
public class CellRenderer extends DefaultTableCellRenderer {

	public CellRenderer() {
		super();
	}

	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		this.setHorizontalAlignment(CENTER);

		return super.getTableCellRendererComponent(table, value, isSelected,
				hasFocus, row, column);
	}
}
Aí é só colocar essa linha no seu código:
tabela.setDefaultRenderer(Object.class, new CellRenderer());
Qualquer coisa posta aí! :thumbup:
T

Veja este exemplo, e em vez de chamar setBackground, use setHorizontalAlignment(SwingConstants.CENTER) (se não me engano é isso).

http://www.exampledepot.com/egs/javax.swing.table/Stripe.html

jason

Eu costumo criar metodos para fazer isso, se te ajudar.:

public static void alinhaTableCentro(JTable table, int[] posicoesDireita) {

DefaultTableCellRenderer cellRender = new DefaultTableCellRenderer();
	cellRender.setHorizontalAlignment(SwingConstants.CENTER);

	for (int numCol = 0; numCol < table.getColumnCount(); numCol++) {

		for (int i = 0; i < posicoesDireita.length; i++) {

			if (numCol == posicoesDireita[i]) {

				table.getColumnModel().getColumn(numCol).setCellRenderer(
						cellRender);
			}
		}
	}
}
R

Bom pessoal … num consegui centralizar o conteudo ta minha tabela… seguinte …vo passa o codigo do demo… eh uma simulação de pilha, tenho uma tabela com apenas uma coluna e queria que o conteúdo ficasse centralizado … segue …


//
//Importa as bibliotecas Java
//
//import			;
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.EmptyStackException;
import java.util.Enumeration;
import java.util.Stack;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;

public class tabelapadrao extends JFrame {
	
	// Variaveis de trabalho.
	public Container io_ct;
	public JTable io_tb_tabela;
	public JButton io_bt_inserir, io_bt_excluir, io_bt_top, io_bt_limpar, io_bt_fechar;
	public JScrollPane io_sp_tabela;
	public JTextField io_tf_inserir;
	public JLabel io_lb_string;
	public Stack stack;
	public int contador = 0;
	public DefaultTableModel modelo ;
	public String[][] dados;
	
	// construtor da classe.
	public tabelapadrao() {
		
		// define o titulo.
		setTitle("Simulação de uma Pilha");
		
		// define o tamanho da janela.
		setBounds(200,200,433,380);
		
		// impossibilita do usuario mexer na janela de tras.
		setResizable(false);
		
		// chama o método responsavel por criar a janela.
		WindowGUI();
	}

	/**	 
	 * Método responsavel por criar a janela.
	 */
	public void WindowGUI(){
		
		// Cria o container e define o Layout a ser usado
		io_ct = getContentPane();
		
		// define o layout a ser usado.
		getContentPane().setLayout(null);
		
		// instancia o stack.
		stack = new Stack();
		
		// Cria o botão de inserir o elemento na pilha.
		io_bt_inserir = new JButton(io_ie_tabela);
		io_bt_inserir.setText("Inserir");
		io_bt_inserir.setBounds(210,10,100,25);
		io_ct.add(io_bt_inserir);
		
		// Cria o botão excluir.
		io_bt_excluir = new JButton(io_ie_excluir);
		io_bt_excluir.setText("Excluir");
		io_bt_excluir.setBounds(320,10,100,25);
		io_ct.add(io_bt_excluir);
		
		// Cria o botão topo.
		io_bt_top = new JButton(io_ie_topo);
		io_bt_top.setText("Topo");
		io_bt_top.setBounds(210,40,100,25);
		io_ct.add(io_bt_top);
		
		// Limpa a pilha.
		io_bt_limpar = new JButton(io_ie_limpa);
		io_bt_limpar.setText("Limpa");
		io_bt_limpar.setBounds(320,40,100,25);
		io_ct.add(io_bt_limpar);
		
		// Cria o label do textfield.
		io_lb_string = new JLabel("Valor: ",SwingConstants.RIGHT);
		io_lb_string.setBounds(0,10,50,25);
		io_ct.add(io_lb_string);
		
		// Cria o textfield, para digitar os elementos.
		io_tf_inserir = new JTextField();
		io_tf_inserir.setBounds(55,10,150,25);
		io_ct.add(io_tf_inserir);
		
		// Cria a tabela.	 		
		io_tb_tabela = new JTable();
		
		// Tabela sem Trambique
      io_tb_tabela.setVisible(true);
		io_sp_tabela = new JScrollPane(io_tb_tabela);
      io_sp_tabela.setVisible(true);
		io_tb_tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		io_sp_tabela.setBounds(150, 80, 120, 220);	 		
		io_ct.add(io_sp_tabela);
		
		String[] colunas = new String []{"Pilha - Valores"};
		
		modelo = new DefaultTableModel(dados, colunas);

		// Insere o modelo.
		io_tb_tabela.setModel(modelo);
		
		// Cria o botão fecha.
		io_bt_fechar = new JButton(io_ie_fechar);
		io_bt_fechar.setBounds(325,310,95,25);
		io_bt_fechar.setText("Fechar");
		io_ct.add(io_bt_fechar);
		
		}
	
	/**
	  * Ação quando clicado em "Fechar".
	  */
	 Action
	 io_ie_fechar	=	new	AbstractAction()
	 {
	 	public void actionPerformed(ActionEvent e)
	 	{
	 		// Fecha o programa.
	 		dispose();
		}	 	
	 };
	
	/**
	  * Ação quando clicado em "Inserir".
	  */
	 Action
	 io_ie_tabela	=	new	AbstractAction()
	 {
	 	public void actionPerformed(ActionEvent e)
	 	{
	 		// Se o campo for diferente de vazio.
	 		if (io_tf_inserir.getText().length() &gt 0) {
	 			 
	 			// adiciona o elemento.
	 			stack.push(io_tf_inserir.getText());	 			
	 			
				//Inserindo as linhas na Tabela
				String[] inserir = new String[]{io_tf_inserir.getText()};
				modelo.insertRow(0,inserir);
				
				// Repinta o container.
				io_ct.repaint();
				io_tf_inserir.setText("");
				io_tf_inserir.requestFocus();
	 		}
	 		else {
	 			// Mostra a mensagem avisando que o campo não pode estar vazio.
	 			JOptionPane.showMessageDialog(null, "Valor não pode estar vazio");
	 		}
		}	 	
	 };
	 
	/**
	  * Ação quando clicado em "Excluir".
	  */
	 Action
	 io_ie_excluir	=	new	AbstractAction()
	 {
	 	public void actionPerformed(ActionEvent e)
	 	{
	 		// remove o elemento.
	                try {
	                	stack.pop();
							modelo.removeRow(0);
	                }
	                catch ( EmptyStackException exception ) {
	                	exception.printStackTrace();
	                	JOptionPane.showMessageDialog(null, "Pilha já vazia");
	                }
		}	 	
	 };
	 
	 /**
	  * Ação quando clicado em "Topo".
	  */
	 Action
	 io_ie_topo	=	new	AbstractAction()
	 {
	 	public void actionPerformed(ActionEvent e)
	 	{
	 		try
	 		{
	 			stack.peek();
	 			JOptionPane.showMessageDialog(null,"Topo da pilha: "+stack.peek());
	 		}
	 		catch (Exception e1) {
				JOptionPane.showMessageDialog(null, "Pilha já vazia");
			}
		}	 	
	 };
	 
	 /**
	  * Ação quando clicado em "Limpa".
	  */
	 Action
	 io_ie_limpa	=	new	AbstractAction()
	 {
	 	public void actionPerformed(ActionEvent e)
	 	{	
	 		try
	 		{
	 			stack.isEmpty();
	 			stack.clear();
	 			//modelo.removeAllRow(modelo.getRowCount());
	 			
	 			JOptionPane.showMessageDialog(null,"Pilha limpa");
	 		}
	 		catch (Exception e1) {
				JOptionPane.showMessageDialog(null, "Pilha já Vazia");
			}
	 				
		}	 	
	 };
	 
    public static void main(String args[]) {
	
	// Decora a janela.
	JDialog.setDefaultLookAndFeelDecorated(true);
	JFrame.setDefaultLookAndFeelDecorated(true);
	
	// Executa o programa.
        JFrame frame = new tabelapadrao();
        frame.show();
    }
}
lina

Olá Rodrigo...

Então, o que o primeiro post falou funciona...

Crie uma outra classe Extendendo a DefaultTableCellRenderer.. (Já existe no JAVA)...

com o código que ele passou..

abaixo:

public class CellRenderer extends DefaultTableCellRenderer {
	 
/**
 * 
 */
private static final long	serialVersionUID	= 1L;

	public CellRenderer() 
	{
 		super();
 	}
 
 	public Component getTableCellRendererComponent(JTable table, Object value,
 			boolean isSelected, boolean hasFocus, int row, int column) {
 		this.setHorizontalAlignment(CENTER);
 
 		return super.getTableCellRendererComponent(table, value, isSelected,
 				hasFocus, row, column);
 	}
 }

Feito isso.. na sua classe tabelapadra.java
abaixo da criação da tabela... use isso:

// Cria a tabela.	 		
io_tb_tabela = new JTable();
io_tb_tabela.setDefaultRenderer(Object.class, new CellRenderer());

aa.. notei que você colocou o código que eu falei:

modelo.insertRow(0,inserir);

hehehe ficou perfeito!

Espero ter ajudado..
Tchauzin!

R

VALEU PESOAL !!! TA FUNFANDOOO !!!
NUM SEI PQ TAVA DANDO ERRO!!

VALEU!!

S

Pessoal, esse tópico foi bem útil, eu consegui centralizar as células da jTable, mas eu queria saber se tem como centralizar uma célula específica? Por exemplo, o campo Idade, deixar o centeúdo centralizado apenas desse campo? Desse jeito que fiz aqui deixou todas as células da jTable centralizadas:

jTable.setDefaultRenderer(Object.class, new CellRenderer());

Eu tentei usar um getColumn(2) mas assim dá erro:

jTable.getColumn(2).setDefaultRenderer(Object.class, new CellRenderer());

Será que tem algum jeito?

iquefarias

Opa… tem sim, tenta ai

TableCellRenderer tcr = new CellRenderer();
TableColumn column =  jTable.getColumnModel().getColumn(numeroColuna);
column.setCellRenderer(tcr);
Almeidaah

Valeu pela força, já ajudou aqui também!
:lol:

lina

Oi,

Nossa… por isso que é bom procurar! Um tópico de 2007 ajudou na dúvida do Almeidaah.

Obs: Por sinal, o usuário rodfs e eu, trabalhamos na mesma empresa.

Tchauzin!

Criado 28 de março de 2007
Ultima resposta 24 de dez. de 2010
Respostas 10
Participantes 8