Boa noite pessoal.
Estou com um problema na minha JTable e não consegui resolver. Criei um método para montar a JTable de forma dinâmica, a ideia é usar TableModel e Renderizar tbem já que em alguns casos quero “Zebrar” a minha Table … tudo funcionando de boa, mas tenho uma tela que tem “Status”, esse cara é do tipo Boolean porem no meu JTable ele aparece “True” or “False” … segue código:
1. package acao;
2. import java.awt.Color;
3. import java.awt.Component;
4. import javax.swing.JTable;
5. import javax.swing.table.AbstractTableModel;
6. import javax.swing.table.DefaultTableCellRenderer;
7. import javax.swing.table.TableCellRenderer;
8. public class GeraJTable extends javax.swing.JTable {
9. private String [] titulo;
10. private int[][] posicao;
11. private int[] cor;
12. private Object[][]dados;
13.
14. // Construtores
15. public GeraJTable(String [] titulo, int [][] tamanho, int[][] posicao, int [] cor, Object[][] dados ){
16. this.titulo = titulo;
17. this.posicao = posicao;
18. this.cor = cor;
19. this.dados = dados;
20. this.setModel(new MeuTableModel());
21. // Define a largura da coluna
22. for(int i=0;i<tamanho.length;i++){
23. this.getColumnModel().getColumn(tamanho[i][0]).setMinWidth(tamanho[i][1]);
24. this.getColumnModel().getColumn(tamanho[i][0]).setMaxWidth(tamanho[i][2]);
25. }
26. // Esconde uma coluna
27. for(int i=tamanho.length-1;i>=0;i--){
28. if (tamanho[i][1]==0 && tamanho[i][2]==0){
29. this.getColumnModel().removeColumn( this.getColumnModel().getColumn(tamanho[i][0]));
30. }
31. }
32. // Renderiza JTable
33. this.setDefaultRenderer(Object.class , new MeuRenderizador());
34. // this.setDefaultRenderer(Double.class , new MeuRenderizador());
35. // this.setDefaultRenderer(Integer.class, new MeuRenderizador());
36. // this.setDefaultRenderer(Boolean.class, new MeuRenderizador());
37. }
38. public GeraJTable(String [] titulo, int [][] tamanho, int[][] posicao){
39. this(titulo, tamanho, posicao, new int[]{}, new Object[][]{} );
40. }
41. public GeraJTable(String [] titulo, int [][] tamanho, int[][] posicao, int [] cor){
42. this(titulo, tamanho, posicao, cor, new Object[][]{});
43. }
44. public GeraJTable(String [] titulo, int [][] tamanho, int[][] posicao, Object[][] dados){
45. this(titulo, tamanho, posicao, new int[]{}, dados);
46. }
47. // Classe AbstractTableModel
48. public class MeuTableModel extends AbstractTableModel{
49. public MeuTableModel(){
50. }
51. @Override
52. public String getColumnName(int num){return titulo[num];}
53. @Override
54. public int getColumnCount() {return titulo.length;}
55. @Override
56. public int getRowCount() {return dados.length;}
57. @Override
58. public boolean isCellEditable(int linha, int coluna) {return false;}
59. @Override
60. public Object getValueAt(int linha, int coluna) {return dados[linha][coluna];}
61. @Override
62. public Class getColumnClass(int coluna) {
63. try {
64. return this.getValueAt(0, coluna).getClass();
65. } catch (Exception e) {
66. return java.lang.Object.class;
67. }
68. }
69. }
70. // Classe Renderizadora
71. public class MeuRenderizador extends DefaultTableCellRenderer implements TableCellRenderer {
72. @Override
73. public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
74. super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
75. this.setOpaque(true);
76. this.setHorizontalAlignment(LEFT);
77. for(int[] pos : posicao) {
78. if (column == pos[0]) {
79. switch (pos[1]) {
80. case 0 : this.setHorizontalAlignment(CENTER); break;
81. case 1 : this.setHorizontalAlignment(RIGHT); break;
82. default: this.setHorizontalAlignment(LEFT); break;
83. }
84. }
85. }
86. if (cor.length==6) {
87. Color foreground, background;
88. if (isSelected) {
89. foreground = Color.getHSBColor(cor[0],cor[0],cor[0]);
90. background = Color.getHSBColor(cor[1],cor[1],cor[1]);
91. } else
92. if (row % 2 == 0) {
93. foreground = Color.getHSBColor(cor[2],cor[2],cor[2]);
94. background = Color.getHSBColor(cor[3],cor[3],cor[3]);
95. } else {
96. foreground = Color.getHSBColor(cor[4],cor[4],cor[4]);
97. background = Color.getHSBColor(cor[5],cor[5],cor[5]);
98. }
99. //background = Color.getHSBColor(row,row,row);
100. this.setForeground(foreground);
101. this.setBackground(background);
102. }
103. return this;
104. }
105.
106. }
107. }
Reparem que eu comentei as linhas 34, 35 e 36. Quando faço isso ele não respeita as cores, mas até ai tudo bem já era de se esperar … mas depois que eu tiro os comentários olha o que acontece.
As colunas “Matricula” e “Salario” respeitam as regras que impus de Centralização e Cor mas o “Status” muda. Alguma ideia do que pode estar acontecendo ?
Segue também o código main do projeto:
package acao;
import java.awt.Container;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
/**
* Como Criar um JTable - Método pronto
* @author vonquelbe.caldeira
*/
public class Inicio {
public static Container container;
public static JFrame tela;
public static JScrollPane scrollpane;
public static GeraJTable table;
public static void main(String[] args) {
tela = new javax.swing.JFrame();
// Tamanho da tela e container
tela.setSize(650,385);
tela.setTitle("Criando JTable");
tela.setResizable(false);
tela.setLocationRelativeTo(null);
tela.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
// Container da tela
container = tela.getContentPane();
container.setLayout(null);
// Cria JTable
Object[][] dados = {
{"1",1542,"Vanderson Lima" , new Boolean(false), new SimpleDateFormat("dd/MM/yyyy").format(new Date(System.currentTimeMillis())), new Double("3450.00") },
{"2",1306,"Oswaldo Sergio Silva", new Boolean(true) , new SimpleDateFormat("dd/MM/yyyy").format(new Date("1978/07/26")), new Double("7230.00") },
{"3",2112,"Patricia Pereira" , new Boolean(false), new SimpleDateFormat("dd/MM/yyyy").format(new Date(1988, 5, 4)) , new Double("1500.00") },
{"4",3, "Alessandra Sandrinha", new Boolean(true) , new SimpleDateFormat("dd/MM/yyyy").format(new Date(1955/01/03)) , new Double("4483.00") },
{"5",105, "Brasil Novaes" , new Boolean(false), new SimpleDateFormat("dd/MM/yyyy").format(new Date("1994/12/26")), new Double("750.00") },
{"6",202, "Pereira Machado" , new Boolean(false), new SimpleDateFormat("dd/MM/yyyy").format(new Date("1963/08/22")), new Double("3350.00") },
{"7",303, "Fabricio Souza" , new Boolean(false), new SimpleDateFormat("dd/MM/yyyy").format(new Date("1971/07/10")), new Double("3355.11") },
{"8",404, "Barbara Nunes" , new Boolean(false), new SimpleDateFormat("dd/MM/yyyy").format(new Date("1945/04/13")), new Double("2789.13") },
};
table = new GeraJTable(new String[]{"Seq","Matricula","Nome","Status","Data Nascimento","Salario"},
new int [][]{{0,90,90},{1,90,90},{3,60,60},{4,110,110}},
new int [][]{{0,0},{1,0},{3,0},{4,0},{5,1}},
new int []{23,243,0,91,0,23},
dados
);
scrollpane = new javax.swing.JScrollPane(table);
scrollpane.setBounds(3,3,tela.getWidth()-11,200);
container.add(scrollpane);
// Abre tela
tela.setVisible(true);
}
}