Alguém resolve?

4 respostas
A

Alguém consegue resolver este problema ???

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class SimpleTable extends JFrame {
	JTable jt;
  public SimpleTable() {
    super("Simple JTable Test");
    setSize(300, 200);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    jt = new JTable(new String[][] { {"This", "is"}, {"a", "Test"} }, new String[] {"Column", "Header"});
    JScrollPane jsp = new JScrollPane(jt);
    getContentPane().add(jsp, BorderLayout.CENTER);
    jt.addMouseListener(new MouseListener(){
           public void mouseClicked(MouseEvent e) {
                 if(e.getClickCount()==1){
 		            jt = new JTable(new String[][] { {"Consegui", "atualizar"}, {"os", "campos!!!"} }, new String[] {"Column", "Header"});
                 }
         }
  
         public void mousePressed(MouseEvent e) {
         }
  
         public void mouseReleased(MouseEvent e) {
         }
  
         public void mouseEntered(MouseEvent e) {
         }
                 
         public void mouseExited(MouseEvent e) {
         }
         
  });

  }

  public static void main(String args[]) {
    SimpleTable st = new SimpleTable();
    st.setVisible(true);
  }
}

Ao clicar em uma célula o valro dos campos deve ser alterado....

E não esta funfando... Alguma idéia???

4 Respostas

D

Repara nesse trecho:

public void mouseClicked(MouseEvent e) { if(e.getClickCount()==1) { jt = new JTable(new String[][] { {"Consegui", "atualizar"}, {"os", "campos!!!"} }, new String[] {"Column", "Header"}); } }

se o evento é mouseClicked (!) então vc não precisa contar que ele deu 1 click…; ok! Depois. nota que você está redefinindo o objeto para que a variável jt faça referência. Ou seja, o objeto que você adicionou ao JScrollPane continua lá! Você não o removeu, e apenas apontou jt para uma nova instância de um JTable (que não tem nada a ver com o anterior)…; sacou? :wink:

D

Olha, tenta esse exemplo, que eu codei:

/* CelulaChata.java */

import java.awt.*;
import javax.swing.*;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class CelulaChata {

      public static void main(String[] argv) {

            final JFrame f = new TableFrame("Celulas que Contam Clicks!");

            Runnable runner = new Runnable() {
                  public void run() {
                        f.setVisible(true);
                  }
            };

            (new Thread(runner)).start();
      }

} // CelulaChata

class TableFrame extends JFrame {

      private JTable myTable;

      public TableFrame(String title) {

            setTitle(title);
            setSize(300, 150);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            myTable = new JTable(
                  new String[][] { { "1", "1", "1", "1", "1" },
                                   { "1", "1", "1", "1", "1" },
                                   { "1", "1", "1", "1", "1" },
                                   { "1", "1", "1", "1", "1" } },
                  new String[] { "A", "B", "C", "D", "E" }
                  );

            myTable.addMouseListener(new MouseAdapter() {
                  public void mouseClicked(MouseEvent e) {
                        __incrementa__(e);
                  }
            });

            JScrollPane scroller = new JScrollPane(myTable);
            getContentPane().add(scroller, BorderLayout.CENTER);

      }

      private void __incrementa__(MouseEvent me) {

            int c = myTable.columnAtPoint(me.getPoint());
            int r = myTable.rowAtPoint(me.getPoint());



            String s_value = (String)myTable.getValueAt(r, c);
            int i_value = 0;

            System.out.println("Incrementando: col=" + c +
                               ", row=" + r +
                               ", value=" + s_value);

            try {
                  i_value = Integer.parseInt(s_value);
            }
            catch (NumberFormatException nfe) {}

            myTable.setValueAt("" + ++i_value, r, c);

      }

} // TableFrame

O código tá tosco, mas dá uma idéia!

A

Legal, entendi blz, mas por exemplo se vc recebesse uma tabela completa com todos os resultados ja prontos como resposta, como faria para efetuar a troca dos valores pelo da tabela nova???

Ou Tipo atualizar o frame com a nova tabela que foi retornada da função?

D

Ai a abordagem “pode” (e deveria) ser completamente diferente. Na verdade, o exemplo acima, é apenas um “brinquedo” e pode, muito bem, ser usado em diálogos simples que funciona bunitinho.

Pro que você tá querendo, então deveria implementar o seu próprio modelo de tabela (TableModel). Dá uma estudada sobre a interface TableModel e a classe AbstractTableModel. É molinho.

Criado 1 de junho de 2005
Ultima resposta 2 de jun. de 2005
Respostas 4
Participantes 2