Dúvida básica em OO!

8 respostas
paulinhohd

Ae galera, to até com vergonha de perguntar mas o lance é esse:

public JTable createJTable() {

	    ArrayList dados = new ArrayList();
	    String[] colunas = new String[] { "Estado", "Cidade" };

	    // Alimenta as linhas de dados
	    dados.add(new String[] { "SP", "São Paulo" });
	    dados.add(new String[] { "RJ", "Rio de Janeiro" });
	    dados.add(new String[] { "RN", "Rio Grande do Norte" });
	    dados.add(new String[] { "ES", "Espirito Santo" });

	    SimpleTableModel modelo = new SimpleTableModel(dados, colunas);
	    JTable JTProdutos = new JTable(modelo);
	    JTProdutos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

	    return JTProdutos;

	}

Esse método de criar tabela, está dentro da minha classe TableModel, porém estou tentando acessar de dentro de outra classe, para criar a minha tabela, só que não to conseguindo nem com reza braba.
Não consigo instanciar os objetos, será que alguém pode me dizer como faço para acessar, chamar esse método?

:lol: :lol: Valeu! :lol: :lol:

8 Respostas

Rafael_Nunes

Cria um objeto da sua classe TableModel e chama através deste objeto o método createJTable().

Ex:

TableModel myTable = new TableModel(); myTable.createJTable();

paulinhohd

Rafael, só mais outra dúvida:

Eu tenho a minha classe Principal, e dentro dela tem a minha classe SimpleTableModel que pr si tem o construtor SimpleTableModel dentro dela, porém quando na classe Principal eu coloco como vc me falou:

SimpleTableModel mytable = new SimpleTableModel();

dá um erro de construtor indefinido, mas tá tudo correto, não consigo entender o porque deste erro!

Olha o código do SimpleTableModel, peguei aqui do artigo do GUJ, veja se ajuda:
public class SimpleTableModel extends AbstractTableModel{

	    private ArrayList linhas = null;
	    private String [] colunas = null;
	    public String[] getColunas() {return colunas;}
	    public ArrayList getLinhas() {return linhas;}
	    public void setColunas(String[] strings) {colunas = strings;}
	    public void setLinhas(ArrayList list) {linhas = list;}
	    //SimpleTableModel mytable = new SimpleTableModel();
    /** 
	* Retorna o numero de colunas no modelo
	* @see javax.swing.table.TableModel#getColumnCount()
	*/
	public int getColumnCount() {return getColunas().length;}
	/**
	* Retorna o numero de linhas existentes no modelo
	* @see javax.swing.table.TableModel#getRowCount()
	*/
	public int getRowCount() {return getLinhas().size();}
	/**
	* Obtem o valor na linha e coluna
	* @see javax.swing.table.TableModel#getValueAt(int, int)
	*/
	public Object getValueAt(int rowIndex, int columnIndex) {
	    // Obtem a linha, que é uma String []
	    String [] linha = (String [])getLinhas().get(rowIndex);
	    // Retorna o objeto que esta na coluna
	    return linha[columnIndex];
	}
	
	public SimpleTableModel(ArrayList dados, String[] colunas){
	    setLinhas(dados);
	    setColunas(colunas);
	}
	
	/**
	* Cria a JTable
	* @return
	*/
	public JTable createJTable() {

	    ArrayList dados = new ArrayList();
	    String[] colunas = new String[] { "Estado", "Cidade" };

	    // Alimenta as linhas de dados
	    dados.add(new String[] { "SP", "São Paulo" });
	    dados.add(new String[] { "RJ", "Rio de Janeiro" });
	    dados.add(new String[] { "RN", "Rio Grande do Norte" });
	    dados.add(new String[] { "ES", "Espirito Santo" });

	    SimpleTableModel modelo = new SimpleTableModel(dados, colunas);
	    JTable JTProdutos = new JTable(modelo);
	    JTProdutos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

	    return JTProdutos;

	}
	/**
	* Seta o valor na linha e coluna
	* @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int)
	*/
	public void setValueAt(Object value, int row, int col){
	    // Obtem a linha, que é uma String []
	    String [] linha = (String [])getLinhas().get(row);
	    // Altera o conteudo no indice da coluna passado
	    linha[col] = (String)value;
	    // dispara o evento de celula alterada
	    fireTableCellUpdated(row,col);
	}
		public void addRow( String [] dadosLinha){
	    getLinhas().add(dadosLinha);
	    // Informa a jtable de que houve linhas incluidas no modelo
	    // COmo adicionamos no final, pegamos o tamanho total do modelo
	    // menos 1 para obter a linha incluida.
	    int linha = getLinhas().size()-1;
	    fireTableRowsInserted(linha,linha);
	    return;
	}
	public void removeRow(int row){
	    getLinhas().remove(0);
	    // informa a jtable que houve dados deletados passando a 
	    // linha reovida
	    fireTableRowsDeleted(row,row);
	}


	/**
	* Remove a linha pelo valor da coluna informada
	* @param val
	* @param col
	* @return
	*/
	public boolean removeRow(String val, int col){
	    // obtem o iterator
	    Iterator i = getLinhas().iterator();
	    int linha = 0;
	    // Faz um looping em cima das linhas
	    while(i.hasNext()){
	        // Obtem as colunas da linha atual
	        String[] linhaCorrente = (String[])i.next();
	        linha++;
	        // compara o conteudo String da linha atual na coluna desejada
	        // com o valor informado
	        if( linhaCorrente[col].equals(val) ){
	            getLinhas().remove(linha);
	            // informa a jtable que houve dados deletados passando a 
	            // linha removida
	            fireTableRowsDeleted(linha,linha);
	            return true;                
	        }
	    }
	    // Nao encontrou nada
	    return false;
	}
	}

Mesmo assim valeu pela ajuda! 8)

Rafael_Nunes

Dentro dela?SimpleTableModel é uma classe interna?
Eu creio que foi só um erro de expressão de sua parte, de qualquer forma, certifique-se na classe SimpleTableModel você tem um construtor default:

public SimpleTableModel(){}

[edit]
Na classe SimpleTableModel você tem um construtor SimpleTabelModel que recebe um ArrayList e um array de Strings, quando você cria algum construtor em uma classe, a VM não criará mais o construtor default.
Você tem duas alternativas:
Ou cria um construtor default como falei acima, na classe SimpleTabelModel, ou na hora de instanciar o objeto, voê deve passar um ArrayList e um array de String como solicita o método:

SimpleTabelModel myModel = new SimpleTabelModel(arrayList, myArrayString);
danieldestro

Primeiro que não faz sentido nenhum seu table model ter um método que cria um JTable, né.

paulinhohd

Dentro dela?SimpleTableModel é uma classe interna?
Eu creio que foi só um erro de expressão de sua parte, de qualquer forma, certifique-se na classe SimpleTableModel você tem um construtor default:

public SimpleTableModel(){}

[edit]
Na classe SimpleTableModel você tem um construtor SimpleTabelModel que recebe um ArrayList e um array de Strings, quando você cria algum construtor em uma classe, a VM não criará mais o construtor default.
Você tem duas alternativas:
Ou cria um construtor default como falei acima, na classe SimpleTabelModel, ou na hora de instanciar o objeto, voê deve passar um ArrayList e um array de String como solicita o método:

SimpleTabelModel myModel = new SimpleTabelModel(arrayList, myArrayString);

Olha o código no post de cima, e eu quiz dizer dentro mesmo, dentro da classe Principal eu tenho minha classe que faz o pool de conexão e funciona normal, pq o estranhamento?
8)

paulinhohd

Daniel, vc aconselha colocaar a criatabela em minha classe principal mesmo?deixar fora da SimpleTableModel??

Entendi Rafael valeu, vacilo meu mesmo!

danieldestro

Exatamente. O Model nem pode saber que o jtable existe. O jtable que depende do model e não ao contrário. Sacou? Isso é a arquitetura (MVC) do Swing.

paulinhohd

Pode crê, valeu! 8)

Criado 4 de maio de 2005
Ultima resposta 4 de mai. de 2005
Respostas 8
Participantes 3