Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di gax80
    Registrato dal
    May 2006
    Messaggi
    631

    un problema con l'AbstractTableModel

    ciao ragazzi vi presento il mio problema:
    in pratica con questo codice ottengo questa tabella:
    codice:
    public void scheda()
        {  GridBagConstraints c = new GridBagConstraints();
          if (ris==0){
            c.gridx=0;//colonna unica
           c.gridy=2;//riga 2 
          }
           else { c.gridx=0;
           c.gridy=3;}
            c.weightx = 1.0;
            c.weighty = 1.0;
            c.fill = GridBagConstraints.BOTH;
            //Hashtable tabella = new Hashtable();
            Object [][] tabella1 = new Object[150][8];
           // HashMap tabella = new HashMap();
            String[] nome ={"nome", "tipo", "scopo", "data estrazione","provenienza", "client/server", "frequenza utilizzo", "codice"};
            JTable tabb = new JTable (tabella1, nome);
            //tabb.setPreferredSize(new Dimension(10,500));
            tabella1[1][2]= "5";
            p_job.add(tabb,c);
           // tab.setRowSelcectionInterval(10,10);
            JScrollPane scroll = new JScrollPane(tabb);
            p_job.add(scroll,c);
            this.validate();
            
         
        }
    
    public Record[] web(int ris2)  
        { try {
           GridBagConstraints c = new GridBagConstraints();
    //coordinate directory       
           if (ris2==1){
           c.gridy=1;
           c.fill = GridBagConstraints.BOTH;}
    //coordinate singola pagina
           else {
            c.gridx=0;
            c.gridy=0;c.fill = GridBagConstraints.BOTH;
                }c.weighty = 0.2;
            try{ 
            tabellaPagina tb = new tabellaPagina("");
            int i=0;        
    //questo controllo verifica se è stato scelto un singolo file o una directory
           
    //identificazione singola pagina        
            if (ris2 == 0) {t=1;
            Record[] rr = new Record[t];//record che richiama i dati dal database
            rr = tb.run(nomefile);//in tb.run(nomefile) ci sono i valori del database
            Record [] r = new Record[t];//record per la visualizzazione nella tabella
            r[0] = new Record(); 
            r[0].setSelezionato(true); //seleziona il flag
            r[0].setNome(rr[0].getNome()); //seleziona il nome del file
            r[0].setNomeFile(rr[0].getNomeFile()); //seleziona il nome della pagina web
            r[0].setPath(rr[0].getPath());//seleziona la directory in cui si trova il file
            r[0].setNumero(rr[0].getNumero());//conta il numero di file in quella directory
            r[0].setCodice(rr[0].getCodice());//visualizza il codice
            r[0].setData(rr[0].getData());//visualizza la data di estrazione
            
            Object[][] data = new Object[r.length][];
    //questo ciclo for mi permette di passargli le tuple che ho configurato nella classe Record metodo getObject()
            for ( i = 0; i < r.length; i++)
            {
                data[i] = r[i].getObjects ();
            }
            
           MyTableModel my = new MyTableModel();
           my.MyTable(data);
           final JTable tab = new JTable(my);
           p_job.add(tab,c);
           rr2 =rr;
            TableColumn column = null;
            column = tab.getColumnModel().getColumn(6);
            my.setUpSportColumn(tab,column);
            tab.setCellSelectionEnabled(true);//abilita solo la cella selezionata
            tab.setColumnSelectionAllowed(true);//elimina la selezione sulla tupla
            tab.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                      int[] selected = tab.getSelectedColumns();
                      for (int i = 0; i < selected.length; i++) {
                            if (selected[i] == 6) {//viene attivato solo per la sesta colonna
                       try{
                            JFrame f = new JFrame();
                            JPanel p = new JPanel();
                            tabellaPagina tb = new tabellaPagina("");
                            int count=1, n_cod=0;//salvo in n_cod il rigo selezionato
                            //stampa il rispettivo codice 
                            JTextArea t = new JTextArea(rr2[0].getCodice(),30,35);
                            JScrollPane s = new  JScrollPane(t);
                            f.setTitle("codice");
                            f.getContentPane().add(s);
                            f.setSize(400,440);
                            f.setLocation(470, 250); 
                            f.setVisible(true);
                              }
                      catch (IllegalArgumentException ee) {}
                      catch (ArrayIndexOutOfBoundsException e1) {}
                      catch (NullPointerException e2) {}     
                                                        }
                  }
                  } });
                  JScrollPane scroll = new JScrollPane(tab); 
                  p_job.add(scroll,c);
    //scheda();
      }  
     if (ris2 == 1) { t=3;        
    //tupla che rappresenta la pagina con i suoi rispettivi campi
            Record[] rr = new Record[t];
            rr = tb.run(nomefile);
            Record [] r = new Record[t];
            while (i!=t){
            r[i] = new Record(); 
            r[i].setSelezionato(true); //seleziona il flag
            r[i].setNome(rr[i].getNome()); //seleziona il nome del file
            r[i].setNomeFile(rr[i].getNomeFile()); //seleziona il nome della pagina web
            r[i].setPath(rr[i].getPath());//seleziona la directory in cui si trova il file
            r[i].setNumero(rr[i].getNumero());//conta il numero di file in quella directory
            r[i].setCodice(rr[i].getCodice());//visualizza il codice
            r[i].setData(rr[i].getData());//visualizza la data di estrazione
            i++; 
            }
            Object[][] data = new Object[r.length][];
    //questo ciclo for mi permette di passargli le tuple che ho configurato nella classe Record metodo getObject()
            for ( i = 0; i < r.length; i++)
            {
                data[i] = r[i].getObjects ();
            }
            
           MyTableModel my = new MyTableModel();
           my.MyTable(data);
           final JTable tab = new JTable(my);
                    p_job.add(tab,c);
                    rr2 =rr;
                    TableColumn column = null;
                    column = tab.getColumnModel().getColumn(6);
                    my.setUpSportColumn(tab,column);
                    tab.setCellSelectionEnabled(true);//abilita solo la cella selezionata
                    tab.setColumnSelectionAllowed(true);//elimina la selezione sulla tupla
                    tab.addMouseListener(new MouseAdapter() {
                    public void mouseClicked(MouseEvent e) {
                              int[] selected = tab.getSelectedColumns();
                              int selectedrow = tab.getSelectedRow();
                              //boolean isSelected = false;
                              for (int i = 0; i < selected.length; i++) {
                                    if (selected[i] == 6) {//viene attivato solo per la sesta colonna
                                    //isSelected = true;
                                try{
                                    JFrame f = new JFrame();
                                    JPanel p = new JPanel();
                                    tabellaPagina tb = new tabellaPagina("");
                                    int count=1, n_cod=0;//salvo in n_cod il rigo selezionato
                                    n_cod=selectedrow;
                                    JTextArea t = new JTextArea(rr2[n_cod].getCodice(),30,35); //stampa il rispettivo codice 
                                    JScrollPane s = new  JScrollPane(t);
                                    f.setTitle("codice");
                                    f.getContentPane().add(s);
                                    f.setSize(400,440);
                                    f.setLocation(470, 250); 
                                    f.setVisible(true);
                                      }
                              catch (IllegalArgumentException ee) {}
                              catch (ArrayIndexOutOfBoundsException e1) {}
                              catch (NullPointerException e2) {}     
                                                                }
                          }
                          } });
            JScrollPane scroll = new JScrollPane(tab); p_job.add(scroll,c);
            
           // scheda();
      } 
      }
           
            catch (SQLException ex) {
                        ex.printStackTrace();
                    } catch (ParserConfigurationException ex) {
                        ex.printStackTrace();
                    } catch (ClassNotFoundException ex) {
                        ex.printStackTrace();
                    } catch (SAXException ex) {
                        ex.printStackTrace();
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
     }
    catch (NullPointerException e){}    
    catch (ArrayIndexOutOfBoundsException e){}
         this.validate();
         scheda();
        return rr2;
    }
    ottengo la tabella che sta in allegato,


    il metodo scheda() che cè nel codice sopra di colore rosso rappresenta la tabella inferiore, mentre web(), di colore verde la tabella superiore...e fin qui niente di male...segue nel secondo messaggio
    quando il diavolo ti accarezza è perchè vuole la tua anima

  2. #2
    Utente di HTML.it L'avatar di gax80
    Registrato dal
    May 2006
    Messaggi
    631
    mentre se faccio così come in questo codice, cambiando al metodo scheda, aggiungendogli appunto l'AbstractTable Model

    codice:
    public void scheda()
         {
        try{
        GridBagConstraints c = new GridBagConstraints();
          if (ris==0){
            c.gridx=0;//colonna unica
            c.gridy=2;//riga 2 
          }else{c.gridx=0;
           c.gridy=3;}
           c.weightx = 1.0;
           c.weighty = 1.0;
           c.fill = GridBagConstraints.BOTH;
           //Object [][] tabella1 = new Object[150][9];
          try{ 
            TabellaScript ts = new TabellaScript();//creo l'istanza alla classe che calcola gli script 
            int t=100;
            Record[] rr = new Record[t];
            //rr = ts.run(nomefile);
            rr = ts.run();
           System.out.println("cus" +rr[2].getNome());
            Record [] r = new Record[t];
            int i=0;
            while (i!=t){
            r[i] = new Record(); 
            r[i].setSelezionato(true); //seleziona il flag
            r[i].setNome(rr[i].getNome()); //seleziona il nome del file
            r[i].setTipo(rr[i].getTipo()); //seleziona il nome della pagina web
            r[i].setScopo(rr[i].getScopo());//seleziona la directory in cui si trova il file
            r[i].setData(rr[i].getData());//visualizza la data di estrazione
            r[i].setProve(rr[i].getProve());
            r[i].setClsv(rr[i].getClsv());
            r[i].setFreq(rr[i].getFreq());
            r[i].setCodice(rr[i].getCodice());//visualizza il codice
            i++; }
            Object[][] data2 = new Object[r.length][];
    //questo ciclo for mi permette di passargli le tuple che ho configurato nella classe Record metodo getObject()
            for (i = 0; i < r.length; i++)
            {
                data2[i] = r[i].getObjects_script();
            }
            MyTableModel my = new MyTableModel();
            my.MyTable_script(data2);
           //Object[][] data2 = new Object[150][9];
            
           //String[] columnNamesScript ={"seleziona","nome", "tipo", "scopo", "data estrazione","provenienza", "client/server", "frequenza utilizzo", "codice"};
             final JTable tabb = new JTable(my);
            p_job.add(tabb,c);
            JScrollPane scroll = new JScrollPane(tabb);
            //p_job.add(scroll,c);
            this.validate();
             }
            catch (SQLException ex) {ex.printStackTrace();} 
             //catch (ParserConfigurationException ex) {ex.printStackTrace(); }
            catch (ClassNotFoundException ex) {ex.printStackTrace();      } catch (SAXException ex) {
                        ex.printStackTrace();
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }}
    catch (NullPointerException e){}    
    catch (ArrayIndexOutOfBoundsException e){}
            this.validate();
       }
    quando il diavolo ti accarezza è perchè vuole la tua anima

  3. #3
    Utente di HTML.it L'avatar di gax80
    Registrato dal
    May 2006
    Messaggi
    631
    in pratica mi stampa a video solo la prima tabella,
    perchè?
    quando il diavolo ti accarezza è perchè vuole la tua anima

  4. #4
    Utente di HTML.it L'avatar di gax80
    Registrato dal
    May 2006
    Messaggi
    631
    in pratica la mia domanda è questa:
    due tabelle su uno stesso form, posso caricare lo stesso AbstacTableModel?

    quando il diavolo ti accarezza è perchè vuole la tua anima

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Non so se è possibile caricare su due tabelle diverse lo stesso TableModel.
    Nel senso che si può sicuramente caricare due istanze diverse dello stesso TableModel, ma non credo che si possa caricare per due tabelle distinte la stessa istanza del TableModel.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da gax80
    due tabelle su uno stesso form, posso caricare lo stesso AbstacTableModel?
    Tecnicamente credo proprio di sì. Ovvio ... c'è da fare delle valutazioni: un table-model sostanzialmente contiene i dati mentre un JTable consente una "visione" di quello che sta dentro il table-model. Quindi 2 tabelle con lo stesso table model dovrebbero "andare in sincrono". Se il table-model dice che ci sono N righe, sarà così per entrambe le tabelle. Se una cella viene modificata attraverso una delle due tabelle, la modifica sarà visibile pure nell'altra tabella. E così via. Ovviamente non ho mai provato ma credo che sia così in linea teorica.

    Ma se non è così che vuoi la gestione, ovviamente non puoi usare lo stesso table-model per 2 o più tabelle. Se vuoi tabelle distinte, devi avere table-model distinti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di gax80
    Registrato dal
    May 2006
    Messaggi
    631
    le ho provate di tutte , ma la seconda tabella non me la visualizza
    anch'io pensavo tecnicamente, ma è un rompicapo
    quando il diavolo ti accarezza è perchè vuole la tua anima

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.