ola tudo bem…
estou com a seguinte duvida em relacao a jtable, como fazer gerar jtable em tempo de execucao numa pesquisa de trabalhadores em que o mesmo tipo ao pesquisar por “a” tenha 5 registro entao tera que ter 5 jtables sendo isso feito em tempo de execucao.
exibinda a informacoes equivalentes do mesmo isso sei como faz so a gerrar jtable q estou penando.
vc usar reflections
http://www.guj.com.br/articles/10
mas é algo bem complicado com jtable…
vc pode fazer um método que cria um jtable e depois executar ele com reflections quantas vezes precisar… ou alterar a metodologia q ta colocando no seu sistema…
Ou você pode usar o ObjectTableModel do projeto towel (link na minha assinatura).
Agora, você precisa mesmo gerar 5 JTables? Ou seriam 5 linhas num único JTable?
[quote=ViniGodoy]Ou você pode usar o ObjectTableModel do projeto towel (link na minha assinatura).
Agora, você precisa mesmo gerar 5 JTables? Ou seriam 5 linhas num único JTable?[/quote]
sim seriam 5 jatables em caso que a pesquisa retorna 5 trabalhadores, em caso podem ter mais ou mesnos…
a pesquisa não poderia ser listada um atras do outro pois são informações referente a funionários, tipo um dado funcionário pode ter mais de uma saida
tipo e feito pela uma pesquisa onde digita o nome o parte do mesmo.
tipo supondo que retornasse os cargos deste trabalhador nesta empresa e o mesmo tenha vários cargos na empresa… então listaria mais ou menos assim
nome funcionario: joao da silva
data efetivacao data finaliza cargo periodo salario
25/09/2010 25/12/2010 analista 3 meses 2.500,00
26/12/2010 gerente 5.000,00
nome funcionario: joao tres tres
data efetivacao data finaliza cargo periodo salario
12/09/2010 12/12/2010 programador 3 meses 1.000,00
26/12/2010 analista 2.500,00
acredirto que entenda melhor a situação…
[quote=ViniGodoy]Ou você pode usar o ObjectTableModel do projeto towel (link na minha assinatura).
Agora, você precisa mesmo gerar 5 JTables? Ou seriam 5 linhas num único JTable?[/quote]
o link da assinatura não veio
Deixa ver se eu entendi… é uma tabela por funcionário e cada funcionário tem uma lista de cargos. Simplificando, temos:
package br.com.exemplo.funcionarios;
import java.util.List;
public class Funcionario {
private String nome;
private List<Cargo> cargos;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<Cargo> getCargos() {
return cargos;
}
public void setCargos(List<Cargo> cargos) {
this.cargos = cargos;
}
// Hashcode, equals, toString, etc...
}
O cargo, por sua vez, teria um formato parecido com esse:
package br.com.exemplo.funcionarios;
import java.math.BigDecimal;
import java.util.Date;
public class Cargo {
private String nome;
private Date inicio;
private Date fim;
private Integer periodo;
private BigDecimal salario;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Date getInicio() {
return inicio;
}
public void setInicio(Date inicio) {
this.inicio = inicio;
}
public Date getFim() {
return fim;
}
public void setFim(Date fim) {
this.fim = fim;
}
public Integer getPeriodo() {
return periodo;
}
public void setPeriodo(Integer periodo) {
this.periodo = periodo;
}
public BigDecimal getSalario() {
return salario;
}
public void setSalario(BigDecimal salario) {
this.salario = salario;
}
// Hashcode, equals, toString, etc...
}
Neste caso, tudo oq vc precisa é de um model adequado:
package br.com.exemplo.funcionarios;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class CargoTableModel extends AbstractTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
private List<Cargo> cargos;
public CargoTableModel(Funcionario funcionario) {
this(funcionario.getCargos());
}
public CargoTableModel(List<Cargo> cargos) {
super();
this.cargos = cargos;
}
@Override
public int getColumnCount() {
return 5;
}
@Override
public int getRowCount() {
return this.cargos.size();
}
@Override
public Object getValueAt(int row, int col) {
Cargo cargo = cargos.get(row);
switch (col) {
case 0:
return cargo.getInicio();
case 1:
return cargo.getFim();
case 2:
return cargo.getNome();
case 3:
return cargo.getPeriodo();
case 4:
return cargo.getSalario();
}
return null;
}
}
Daí, pra cada funcionário basta criar um JTable usando este model.
meuContainer.add(new JTable(new CargoTableModel(meuFuncionario)));
Ou algo assim. Exitem várias maneiras e a melhor delas depende do cenário. Isso é um esboço.
obrigado a todods eu criei o metodo que resolveu meu problema, so que surgiu problema de layout conforme descrevo abaixo do código
[code] public void createTables(){
if (panelTables.getComponentCount()>0){
panelTables.removeAll();
}
for (Funcionario func: buscaFuncionario()) {
STable<FuncionarioVO> table = new STable<FuncionarioVO>(
new String[]{"NomeFuncionario","DataEfetivacao","Periodo","Cargo", "Salário"},
new String[]{"nome","dtEfetivacao","periodo","cargo","salario"},
STable.DEFAULT_ALTERNATE_ROW_COLOR);
table.columnsAlignment(new int []{STable.ALIGN_CENTER, STable.ALIGN_CENTER,STable.ALIGN_CENTER,STable.ALIGN_CENTER} );
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.add(func);
table.setLayout(new GridLayout(0,1,15,0));
SLabel lblNameFunc = new SLabel();
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("BundlePeriodoSemestral");
SLabel lblNome = new SLabel(bundle.getString("BuscaFuncionarioPeriodoSemestral.lblNameFunc.label"));
lblNameFunc.setValue(func.getNrRgFunc()+"-"+func.getNome());
lblNameFunc.setHorizontalTextPosition(JLabel.LEFT);
lblNameFunc.setVerticalTextPosition(JLabel.BOTTOM);
lblNameFunc.setBounds(0, 1, 0, 0);
panelTables.add(new SLabel(lblNome.getLabelText()+" "+lblNameFunc.getLabelText()));
panelTables.add(new JScrollPane(table));
}
this.updateUI();
}[/code]
o único problema que estou é referente ao espaçamento de uma tabela para outra… e o texto fica acima da tabela so fica alinhado a esquerda, acredito que seja problema do layout utilizado, estou utilizando GridLayout :
panelTables.setLayout(new GridLayout(0, 1, 0, 0));
como faria colocar os valores de espaçamento fixo, sem que o layout divide pelo numero de componente e divide a distancia igualmente
Tente criar um JPanel para cada tabela, algo assim:
public void createTables(){
if (panelTables.getComponentCount()>0){
panelTables.removeAll();
}
for (Funcionario func: buscaFuncionario()) {
STable<FuncionarioVO> table = new STable<FuncionarioVO>(
new String[]{"NomeFuncionario","DataEfetivacao","Periodo","Cargo", "Salário"},
new String[]{"nome","dtEfetivacao","periodo","cargo","salario"},
STable.DEFAULT_ALTERNATE_ROW_COLOR);
table.columnsAlignment(new int []{STable.ALIGN_CENTER, STable.ALIGN_CENTER,STable.ALIGN_CENTER,STable.ALIGN_CENTER} );
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.add(func);
table.setLayout(new GridLayout(0,1,15,0));
SLabel lblNameFunc = new SLabel();
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("BundlePeriodoSemestral");
SLabel lblNome = new SLabel(bundle.getString("BuscaFuncionarioPeriodoSemestral.lblNameFunc.label"));
lblNameFunc.setValue(func.getNrRgFunc()+"-"+func.getNome());
lblNameFunc.setHorizontalTextPosition(JLabel.LEFT);
lblNameFunc.setVerticalTextPosition(JLabel.BOTTOM);
lblNameFunc.setBounds(0, 1, 0, 0);
// panelTables.add(new SLabel(lblNome.getLabelText()+" "+lblNameFunc.getLabelText()));
// panelTables.add(new JScrollPane(table));
JPanel pnlFunc = new JPanel();
pnlFunc.add(new SLabel(lblNome.getLabelText()+" "+lblNameFunc.getLabelText()), BorderLayout.NORTH);
pnlFunc.add(new JScrollPane(table), BorderLayout.CENTER);
panelTables.add(pnlFunc);
}
this.updateUI();
}