Bom dia !!
Alguem sabe como centralizar o conteúdo das células numa JTable ?
Vc tem que implemetar um Renderer pra célula:
[code]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);
}
}[/code]
Aí é só colocar essa linha no seu código:
Qualquer coisa posta aí! :thumbup:
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
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);
}
}
}
}
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() > 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();
}
}
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:
[code]
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);
}
}[/code]
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!
VALEU PESOAL !!! TA FUNFANDOOO !!!
NUM SEI PQ TAVA DANDO ERRO!!
VALEU!!
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?
Opa… tem sim, tenta ai
TableCellRenderer tcr = new CellRenderer();
TableColumn column = jTable.getColumnModel().getColumn(numeroColuna);
column.setCellRenderer(tcr);
Valeu pela força, já ajudou aqui também!
:lol:
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!