Visualizzazione dei risultati da 1 a 10 su 12

Discussione: jTable

Hybrid View

  1. #1
    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!!!

  2. #2
    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, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    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.

  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
    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, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    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?

  6. #6
    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);

  7. #7
    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
    pippo.jpg
    Vedo Questo, ovvero una casella molto piu grande, ma con solo le comboBox e sfondo bianco.
    2 cose si notano:
    1) Il Look&Feel non è quello base/predefinito (il Metal) ma è il "Nimbus" Look&Feel .... (non è che magari c'è qualche inghippo con JOptionPane ... ??).
    2) Quella barra con scritto "Ingrediente Selezionato" .... è il header di JTable. Un pezzo della tabella si vede .... almeno.

    Quote Originariamente inviata da gmnf Visualizza il messaggio
    Anzi precisamente se utilizzo setSize non succede nulla
    setSize è la dimensione reale, effettiva del componente. In generale: o la imposti tu se non c'è un layout manager, o la calcola/imposta il layout manager se c'è. E per JOptionPane i componenti nel message sono in un layout manager, quindi setSize non vale (conta in questo caso il "preferred size").

    Quote Originariamente inviata da gmnf Visualizza il messaggio
    invece se utilizzo "t.setPreferredSize(100);" mi da un errore precisamente:
    no suitable method found for setPreferredSize(int);
    Capisco che uno magari è agli inizi su Java ... ci sono passato anch'io. Ma c'è una ottima documentazione del framework, io la apro almeno una decina di volte al giorno.
    http://docs.oracle.com/javase/7/docs...t.Dimension%29
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.