Copiar conteúdo JTable apartir do clique no botão

11 respostas
levimendes

Olá pessoal, estou precisando copiar a o conteúdo de um JTable através do clique no botão.

Alguém já fez este tipo de tarefa?

11 Respostas

Luciano_Lopes

faz assim:

jTable.getValueAt(0,0); //pega valor da linha 0 e coluna 0

levimendes

Eu quero poder selecionar várias linhas e copiar através do clique no botão, será que esta é a maneira mais apropriada?

Além disso eu preciso armazenar as linhas copiadas na memória para o usuário poder colar onde ele quiser, ou seja, em um arquivo txt, doc, xls, etc.

Luciano_Lopes

AI depende,o que esta querendo fazer?

levimendes

Copiar(executar o ctrl c + ctrl v) para a memória o conteúdo de uma seleção no JTable, para que o usuário possa colar este em qualquer arquivo que ele deseje essas linha selecionadas.

Luciano_Lopes

Bem,nesse caso você ativa o multi-select da table e usa o código que te mostrei,nunca fiz copia com várias linhas selecionadas mas isso deve resolver.Da uma testada e qualquer coisa posta aqui.

ViniGodoy

Se você implementou seu próprio TableModel, essa tarefa é bastante simples:

int selectedRows = table.getSelectedRows();
for (int row : selectedRows) {
  List<SuaClasse> objetos = new ArrayList<SuaClasse>();
  objetos.add(seuModel.get(row));
}

seuOutroModel.addAll(objetos);

Se você está usando o DefaultTableModel, meus pêsames.

levimendes

Não entendi Vinigodoy.
Na verdade eu estou usando o TableModel, mas não compreendi a idéia do seu código.

:?: :?: :?: :?: :?: :?: :?: :?: :?:

ViniGodoy

O Jtable tem um método chamado getSelectedRows().
Esse método retorna um array de inteiros, contendo cada linha selecionada.

Aí, para cada linha, você pega o objeto que está nessa linha e adiciona numa lista.
E depois, chama um método no outro model, para adicionar esses objetos lá.

Marky.Vasconcelos

Posta seu TableModel que podemos te ajudar um pouco mais.

Se voce criou um, transferir dados entre eles vai ser trivial.

levimendes

O TableModel está sendo definido pelo framewaork que estou trabalhando (Swing ADF no JDeveloper da Oracle).

Definição do TableModel na linha 14.

public void jbInit() throws Exception {        
        bancoFinanceiroTable = new UneditableTable();
        //MaquinaDeContexto.setCurrentPanelBinding(this.panelBinding);
        this.setLayout(null);
        tituloLabel.setText("Banco Financeiro");
        tituloLabel.setBounds(new Rectangle(20, 15, 295, 30));
        tituloLabel.setFont(new Font("Tahoma", 0, 16));
        listadosLabel.setBounds(new Rectangle(15, 70, 230, 10));
        bancoFinanceiroScrollPane.setBounds(new Rectangle(15, 85, 365, 130));
        bancoFinanceiroScrollPane.getViewport().add(bancoFinanceiroTable, null);
        this.add(bancoFinanceiroScrollPane, null);
        this.add(listadosLabel, null);
        this.add(tituloLabel, null);
        bancoFinanceiroTable.setModel((TableModel)panelBinding.bindUIControl("ViewObjBancoFinanceiroGrid1",bancoFinanceiroTable));
        // Lista quantos registros constam no grid.
        // O listener abaixo atualiza o contador caso registros sejam inseridos ou removidos.
        listadosLabel.setText(bancoFinanceiroTable.getRowCount() +
                              " listados");
        panelBinding.addRowSetListener(new JUPanelRowSetListener() {
                public void rangeRefreshed(JUIteratorBinding p1,
                                           RangeRefreshEvent p2) {
                }

                public void rangeScrolled(JUIteratorBinding p1,
                                          ScrollEvent p2) {
                }

                public void rowInserted(JUIteratorBinding p1,
                                        InsertEvent p2) {
                    listadosLabel.setText(bancoFinanceiroTable.getRowCount() +
                                          " listados");
                }

                public void rowDeleted(JUIteratorBinding p1,
                                       DeleteEvent p2) {
                    listadosLabel.setText(bancoFinanceiroTable.getRowCount() +
                                          " listados");
                }

                public void rowUpdated(JUIteratorBinding p1,
                                       UpdateEvent p2) {
                    listadosLabel.setText(bancoFinanceiroTable.getRowCount() +
                                          " listados");
                }

                public void navigated(JUIteratorBinding p1,
                                      NavigationEvent p2) {
                }
            });
        // SetNames são usados para a gerencia de estado e contexto com as classes ContextXxxxx, ConfiguratorXxxx e Ouvidoria
        bancoFinanceiroTable.setName("bancoFinanceiroTable");
        bancoFinanceiroTable.addMouseListener(Ouvidoria.getBancoFinanceiroGridListener());
        DCIteratorBinding dcib = (DCIteratorBinding)panelBinding.get("ViewObjBancoFinanceiroGrid1Iterator");
        Configurator.configureBancoFinanPanelGrid(ContextBancoFinanceiroPanelGrid.INICIAL, this, 
                                                  MaquinaDeNavegacao.getToolBar(), MaquinaDeNavegacao.getMenuBar(), dcib);
        bancoFinanceiroTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        
    }
Marky.Vasconcelos

Vish… agora voce vai ter que ver como voce resgata um objeto desse model, eu não o conheço.

Criado 22 de novembro de 2010
Ultima resposta 22 de nov. de 2010
Respostas 11
Participantes 4