il codice deve essere messo tra i tag [code][/code]
altrimenti non si capisce nulla
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
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
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 è:
il codice del vettore è: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(); } }
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!!!
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 developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
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:
Ho stampato il t.preferredSize() che corrisponde a: [width=15,height=16], e quello dello ScrollPane che è: [width=456,height=406];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 };
Inoltre ho cercato di usare il metodo setSize ma non succede nulla.
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 developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
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?
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);