Ciao a tutti!
Volevo sapere se è possibile fare una finestra con più di una JTable...!
Devo visualizzare diversi dati in una finestra che poi devo stampare....!
GRAZIE MILLE!
![]()
Ciao a tutti!
Volevo sapere se è possibile fare una finestra con più di una JTable...!
Devo visualizzare diversi dati in una finestra che poi devo stampare....!
GRAZIE MILLE!
![]()
Non vedo problemi. Usa il layout-manager che preferisci per disporre i componenti come vuoi.Originariamente inviato da ELY85
Volevo sapere se è possibile fare una finestra con più di una JTable...!
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ok grazie mille!
![]()
Ciao!
Ho un problema: ho una finestra che dovrebbe contenere più di una tabella, invece continene una tabella sola!
Ho una ListNode DOSI, contenente diversi oggetti Dose!codice:import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class PannelloDosi extends JPanel { private ListNode DOSI; public PannelloDosi(ListNode DOSI) { this.DOSI = DOSI; setBackground(new Color(255,255,255)); int numTabelle = DOSI.length(); GestioneTabellaDosi gtd = new GestioneTabellaDosi(); for (int i=1; i<=numTabelle; i++) { JTable table = gtd.creaTabellaDosi((Dosi)DOSI.head()); add(table); DOSI = (ListNode)DOSI.tail(); } } }
Per ogni oggetto Dose dovrei creare una JTable con i dati dell'oggetto!
Il problema è che mi appare nella finestra solo una JTable, con i dati del primo oggetto presente nella lista (e di oggetti dosi nella lista ne ho tre al momento!). La lista dovrebbe scorrerla tutta!
Dove potrebbe essere il problema?
GRAZIE MILLE!codice:import javax.swing.*; public class GestioneTabellaDosi { private JTable table; public GestioneTabellaDosi() { table = new JTable(); } public JTable creaTabellaDosi(Dosi d) { ListNode IngConDosi = d.getIngConDosi(); int numIng = IngConDosi.length(); String[] nomi = new String[numIng + 1]; String[] dosi = new String[numIng + 1]; nomi[0] = d.getNomeProdotto(); dosi[0] = Float.toString(d.getTotale()); for (int j=1; j<=numIng; j++) { IngredienteConDose ing = (IngredienteConDose)IngConDosi.head(); String nome = ing.getNome(); String dose = Float.toString(ing.getDose()); nomi[j] = nome; dosi[j] = dose; IngConDosi = (ListNode)IngConDosi.tail(); } Object[][] datiCelle = new Object[numIng + 1][2]; /** Costruisco la griglia mettendo in prima colonna i nomi, * e in seconda colonna le dosi. */ for (int k=0; k<nomi.length; k++) { datiCelle[k][0] = nomi[k]; for (int c=1; c<2; c++) { datiCelle[k][c] = dosi[k]; } } String[] vuoto = new String[2]; vuoto[0] = ""; vuoto[1] = ""; TabellaDosi myTable = new TabellaDosi(datiCelle, vuoto); table.setModel(myTable); return table; } }
Ovvio (almeno per meOriginariamente inviato da ELY85
Ho un problema: ho una finestra che dovrebbe contenere più di una tabella, invece continene una tabella sola!)
Hai una sola istanza di GestioneTabellaDosi, quindi il JTable che ottieni è sempre lo stesso identico oggetto (referenziato dal campo 'table' della classe GestioneTabellaDosi).
Ovviamente il gestore dell'interfaccia utente non è così scemo da aggiungere lo stesso identico oggetto.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Perciò nel ciclo for devo aggiungerci anche
Giusto?codice:GestioneTabellaDosi gtd = new GestioneTabellaDosi();
GRAZIE MILLE!
![]()
Dipende... non è detto. Per il tuo "design" è corretto e ha senso creare più istanze di GestioneTabellaDosi?? Altrimenti nel metodo creaTabellaDosi crea una nuova JTable ogni volta.Originariamente inviato da ELY85
Perciò nel ciclo for devo aggiungerci anche
Giusto?codice:GestioneTabellaDosi gtd = new GestioneTabellaDosi();
Dal codice che vedo, sembra che GestioneTabellaDosi sia una classe di "utility" con un metodo che semplicemente fa e ritorna qualcosa. Visto così non ha senso creare più istanze di GestioneTabellaDosi.
La questione è sempre la solita: il design delle classi.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
GRAZIE!
![]()
Ho modificato così il codice:
codice:public class PannelloDosi extends JPanel { private ListNode DOSI, TABELLE; private JLabel data; private JTextField txt; private JButton salva, stampa; public PannelloDosi(ListNode DOSI) { this.DOSI = DOSI; setBackground(new Color(51,204,255)); data = new JLabel("Data:"); txt = new JTextField(8); txt.setEditable(true); add(data); add(txt); GestioneTabellaDosi gtd = new GestioneTabellaDosi(); TABELLE = gtd.creaTabelleDosi(DOSI); int numTabelle = TABELLE.length(); for (int i=1; i<=numTabelle; i++) { JTable table = (JTable)TABELLE.head(); add(table); TABELLE = (ListNode)TABELLE.tail(); } salva = new JButton(" SALVA "); stampa = new JButton(" STAMPA "); add(salva); add(stampa); } }
Ma mi visualizza solo la prima tabella della lista....!codice:public class GestioneTabellaDosi { private JTable table; private ListNode TABELLE; public GestioneTabellaDosi() { table = new JTable(); TABELLE = new ListNode(); } public ListNode creaTabelleDosi(ListNode DOSI) { int numDosi = DOSI.length(); for (int i=1; i<=numDosi; i++) { Dosi d = (Dosi)DOSI.head(); ListNode IngConDosi = d.getIngConDosi(); int numIng = IngConDosi.length(); String[] nomi = new String[numIng + 1]; String[] dosi = new String[numIng + 1]; nomi[0] = d.getNomeProdotto(); dosi[0] = Float.toString(d.getTotale()); for (int j=1; j<=numIng; j++) { IngredienteConDose ing = (IngredienteConDose)IngConDosi.head(); String nome = ing.getNome(); String dose = Float.toString(ing.getDose()); nomi[j] = nome; dosi[j] = dose; IngConDosi = (ListNode)IngConDosi.tail(); } Object[][] datiCelle = new Object[numIng + 1][2]; /** Costruisco la griglia mettendo in prima colonna i nomi, * e in seconda colonna le dosi. */ for (int k=0; k<nomi.length; k++) { datiCelle[k][0] = nomi[k]; for (int c=1; c<2; c++) { datiCelle[k][c] = dosi[k]; } } String[] vuoto = new String[2]; vuoto[0] = ""; vuoto[1] = ""; TabellaDosi myTable = new TabellaDosi(datiCelle, vuoto); table.setModel(myTable); TABELLE.insert(table); DOSI = (ListNode)DOSI.tail(); } return TABELLE; } }
Perchè questa volta?
GRAZIE MILLE!
Non dovrebbe dipendere da GestioneTabellaDosi questa volta....giusto?