Visualizzazione dei risultati da 1 a 10 su 12

Discussione: jTable

Hybrid View

  1. #1
    il codice deve essere messo tra i tag [code][/code]
    altrimenti non si capisce nulla
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Quote Originariamente inviata da schumy2000 Visualizza il messaggio
    il codice deve essere messo tra i tag
    altrimenti non si capisce nulla
    Non solo... va anche postato indentato, altrimenti ha poco senso anche l'uso del tag CODE.

    Con l'introduzione del nuovo forum, la cosa è stata anche migliorata: è sufficiente entrare in modalità avanzata per poter avere tutti gli strumenti di editing, quindi fare clic sul pulsante "#", che automaticamente inserisce i tag appositi.

    Ciao.
    Ultima modifica di LeleFT; 01-10-2013 a 13:34
    "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

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    22
    Allora cercherò di essere più chiaro, aiutandomi anche con delle immagini.
    Io ho un menù inserito in una tabella "Pizze", cliccando su questa tabella mi si apre un pannello(utile per aggiungere o sottrare gli ingredienti) all'interno ho inserito delle JLabel e due comboBox una degli ingredienti disponibili e una degli ingredienti della pizza selezionata, adesso vorrei inserire una tabella dove vanno messi gli ingredienti selezionati nella prima combobox (ho deciso una tabella cosi non ho problemi per poi eliminarli nel caso in cui si cambia scelta), passo al codice:

    codice:
    private void PizzeMousePressed(java.awt.event.MouseEvent evt) {                                   
            
            int RigaSelezionata=-1;
            String NomePizza = null;
            String Ingredienti = null;
            RigaSelezionata = Pizze.getSelectedRow();
            NomePizza = (String) Pizze.getValueAt(RigaSelezionata, 0);
            Ingredienti = (String) Pizze.getValueAt(RigaSelezionata, 1);
            int p=0;
            
                   String[] tokens = Ingredienti.split(",|\\s");  
                   String[] Sottrai = new String[(tokens.length/2)+1];
                   for(int i=0;i<tokens.length;i++){
                      if(tokens[i].equals("")){
                          System.out.println("Questo è vuoto");
                      }else {
                          Sottrai[p] = tokens[i];
                          p++;
                      }
                  }
                  
              
          
            JComboBox box2=new JComboBox(Sottrai);
            if(NomePizza!=null){
            JLabel labelNomePizza= new JLabel(NomePizza);
            JLabel labelIngredienti = new JLabel("Gli ingredienti sono:" + Ingredienti);
            JLabel label1=new JLabel("Supplementi :");
            JLabel label2=new JLabel("Sottrai :");
            
            label1.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
            label2.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
            
             Vector v = new Vector(3); 
             v.add("Paperino");
             TableModel dataModel = new VectorTableModel(v);
             JTable table = new JTable(dataModel); 
              
            final JComponent[] inputs = new JComponent[] {
                    labelNomePizza,
                    labelIngredienti,
                    label1,
            box1,
                    label2,
                    box2,
                    table
            };
    }

    Il codice del tableModel è:

    codice:
    public class VectorTableModel extends AbstractTableModel  {
        
       
    Vector v = null;
    
    String[] ColName = {"Ingrediente Selezionato"};
    
     public VectorTableModel(Vector v) {
    this.v = v; 
    } 
    
        
    
    
        @Override
        public int getRowCount() {
            return v.size();
        }
    
        @Override
        public int getColumnCount() {
           return ColName.length;
        }
    
        @Override
        public Object getValueAt(int row, int col) {
            VectorIngredienti b =(VectorIngredienti)v.elementAt(row);
            return b.ingrediente;
    
    } 
        @Override
         public String getColumnName(int col) {
             return ColName[col];
    } 
        @Override
     public Class getColumnClass(int col) {
    return getValueAt(0, col).getClass();
    } 
        @Override
        public boolean isCellEditable(int row, int col){
           /*if ((col == 2)|| (col == 3))
               return true;
           else return false;*/
           return false;
        } 
        @Override
        public void setValueAt(Object value, int row,int col) {
             VectorIngredienti b = (VectorIngredienti)v.elementAt(row);
             b.ingrediente=((String)value);
             fireTableDataChanged();
    }
    }
    il codice del vettore è:

    codice:
    public class VectorIngredienti {
        public Object ingrediente; 
    
    
    public VectorIngredienti(Object ingrediente){//, String author, int quantity, float price) {
    this.ingrediente = ingrediente;
    
        }
    }

    Quando nel JComponent non inserisco la table ottengo:
    senza table.jpg

    Quando inserisco la table, invece di vedersi la tabella, lo sfondo diventa bianco e vedo solamente le comboBox e il tasto ok!!!A cosa è dovuto?

    Ps Naturalmente manca tutto il codice che inserisce l'ingrediente selezionato nella tabella!!!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da gmnf Visualizza il messaggio
    Quando nel JComponent non inserisco la table ottengo:
    senza table.jpg

    Quando inserisco la table, invece di vedersi la tabella, lo sfondo diventa bianco e vedo solamente le comboBox e il tasto ok!!!A cosa è dovuto?
    Quindi il JTable vuoi farlo vedere nel "message" (insieme ad altri componenti) di un JOptionPane ?? Se così, ora è chiaro!

    Innanzitutto (questo vale in generale), se in un layout inserisci solo JTable, il suo header non ce l'hai, dovresti aggiungerlo esplicitamente (usando JTable in un JScrollPane è automatico questo).

    Poi comunque se la tabella fosse inizialmente vuota allora effettivamente la sua dimensione potrebbe essere 0 (o comunque tale da non vedersi). Ma se ci sono elementi, la tabella dovrebbe avere una dimensione "preferita" tale da farli vedere.
    In ogni caso è una questione di dimensioni e dovresti comunque valutare tu se mettere JTable in un JScrollPane o no.

    P.S. fatti stampare il "preferred size" di JTable, vedi subito che dimensione ha quando è nel JOptionPane.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    22
    Ho inserito JScrollPane, ma non cambia nulla, anzi mi ritrovo un "messaggio" più grande ma sempre con lo sfondo bianco....ho fatto in questo modo:

    codice:
     Vector v = new Vector(3); 
             v.add("Paperino");
             TableModel dataModel = new VectorTableModel(v);
             JTable t = new JTable(dataModel); 
             JScrollPane scrollpane = new JScrollPane(t); 
             
            final JComponent[] inputs = new JComponent[] {
                    labelNomePizza,
                    labelIngredienti,
                    label1,
                    box1,
                    label2,
                    box2,
                    t
                    
            };
    Ho stampato il t.preferredSize() che corrisponde a: [width=15,height=16], e quello dello ScrollPane che è: [width=456,height=406];
    Inoltre ho cercato di usare il metodo setSize ma non succede nulla.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da gmnf Visualizza il messaggio
    Ho stampato il t.preferredSize() che corrisponde a: [width=15,height=16]
    Questa è molto piccola .... ma "qualcosa" dovresti comunque vedere (almeno come differenza di colori tra la tabella e il JOptionPane). Ad ogni modo: se vuoi mettere JTable in JScrollPane, ok, però poi nel message devi mettere il JScrollPane (non più JTable).
    E per le dimensioni, vale di nuovo il "preferred size", ovvero get/setPreferredSize.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    22
    pippo.jpg

    Vedo Questo, ovvero una casella molto piu grande, ma con solo le comboBox e sfondo bianco.
    Ho giocato un po con il preferredSize, ma quando stampo le dimensioni non c'è alcun cambiamento, restano tali e quali. E possibile che nel tableModel devo definire qualche metodo per le dimensioni?

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    22
    Anzi precisamente se utilizzo setSize non succede nulla, invece se utilizzo "t.setPreferredSize(100);" mi da un errore precisamente:
    no suitable method found for setPreferredSize(int);

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 © 2026 vBulletin Solutions, Inc. All rights reserved.