Boa Tarde Companheiros ....
Preciso entender o uso correto do TableModel ...
Abaixo meu ModelTable:
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.table.AbstractTableModel;
public class ModelTable extends AbstractTableModel {
private ArrayList linhas = null;
private String [] colunas = null;
private boolean [] colsEdicao;
public ModelTable(ArrayList dados, String[] colunas, boolean [] edicao){
setLinhas(dados);
setColunas(colunas);
colsEdicao = edicao;
}
public int getColumnCount() {return getColunas().length;}
public int getRowCount() {return getLinhas().size();}
public Object getValueAt(int rowIndex, int columnIndex) {
String [] linha = (String [])getLinhas().get(rowIndex);
return linha[columnIndex];
}
public String[] getColunas() {return colunas;}
public ArrayList getLinhas() {return linhas;}
public void setColunas(String[] strings) {colunas = strings;}
public void setLinhas(ArrayList list) {linhas = list;}
@Override
public void setValueAt(Object value, int row, int col){
String [] linha = (String [])getLinhas().get(row);
linha[col] = (String)value;
fireTableCellUpdated(row,col);
}
public boolean isCellEditable(int row, int col){
//return colsEdicao[col];
if (col == 2){
return false;
}else {
return true;
}
}
public void addRow( String [] dadosLinha){
getLinhas().add(dadosLinha);
int linha = getLinhas().size()-1;
fireTableRowsInserted(linha,linha);
return;
}
public void removeRow(int row){
getLinhas().remove(0);
fireTableRowsDeleted(row,row);
}
public boolean removeRow(String val, int col){
Iterator i = getLinhas().iterator();
int linha = 0;
while(i.hasNext()){
String[] linhaCorrente = (String[])i.next();
linha++;
if( linhaCorrente[col].equals(val) ){
getLinhas().remove(linha);
fireTableRowsDeleted(linha,linha);
return true;
}
}
return false;
}
public String getColumnName(int col){
return getColunas()[col];
}
}
Minha Classe:
public class PanelModular extends javax.swing.JPanel {
PreencheCombo preencheCombo = new PreencheCombo(this);
String[] codigo;
String[] descricao;
String[] unidade;
String nomeColuna = "";
private int tamanhoArray = 0;
String dados[][]= {};
String colunaNome[] = {"Codigo", "Descrição", "UN","Qtde"};
ArrayList dadosTabela = new ArrayList();
public boolean [] edicao = {false, true};
ModelTable modeloMaterial = new ModelTable(dadosTabela, colunaNome, edicao);
ModelTable modeloServico = new ModelTable(dadosTabela, colunaNome, edicao);
public JTable jTServico = new JTable(modeloServico);
public JTable jTModular = new JTable(modeloMaterial);
JTabbedPane tabbedPane = new JTabbedPane();
/** Creates new form PanelOrcamento */
public PanelModular() {
initComponents();
carregarCombos();
tabbedPane.setBounds(0, 0, 730, 283);
jPAbas.add(tabbedPane);
//Aba Material
JPanel panelMaterial = new JPanel();
panelMaterial.setLayout(new BorderLayout());
//jTModular = new JTable(dados,colunaNome);
JScrollPane scrollPaneMaterial = new JScrollPane();
scrollPaneMaterial.setViewportView(jTModular);
scrollPaneMaterial.setBounds(0, 0, 730, 283);
panelMaterial.add(scrollPaneMaterial);
jTModular.setBounds(0, 0, 730, 283);
jTModular.setModel(modeloMaterial);
tabbedPane.addTab("Material", null, panelMaterial, null);
//Aba Serviço
JPanel panelServico = new JPanel();
panelServico.setLayout(new BorderLayout());
//jTServico = new JTable(dados,colunaNome);
JScrollPane scrollServico = new JScrollPane();
scrollServico.setViewportView(jTServico);
scrollServico.setBounds(0, 0, 730, 283);
panelServico.add(scrollServico);
jTServico.setBounds(0, 0, 730, 283);
jTServico.setModel(modeloServico);
tabbedPane.addTab("Serviço", null, panelServico, null);
}
...
Meu Botão de Inserir linha em Tabela:
private void jBInserirRegistroActionPerformed(java.awt.event.ActionEvent evt) {
String [] linha = {"","","",""};
if (tabbedPane.getSelectedIndex() == 1){
modeloServico.addRow(linha);
} else {
modeloMaterial.addRow(linha);
preencheCombo.carregarComboTable(jTModular,modeloMaterial,"tblMaterialServico","CodItem","Descricao");
}
}
O meu Problema é o seguinte:
Se a Aba de Material estiver selecionada deve-se inserir na Tabela JModular.
Se a Aba de Serviço estiver selecionada deve-se inserir na Tabela jTServico.
Acontece que apesar de dar um new ModelTable(dadosTabela, colunaNome, edicao) para ambas tabelas, as mesmas compartilham o mesmo array, ou seja, a linha é inserida corretamente na Tabela porém sempre carrega todos registros,tanto os já inseridos na JModular como os inseridos jTServico.
Vou ter que criar dois Arrays para controlar isso? o new não era pra criar um novo objeto e tratar os arrays independentes? :roll: :?:
Percebo que quanto mais eu fuço menos eu sei ...
Desde já agradeço!
