Jframe & jtable

Forum di discussione sul linguaggio Java e JSP

Moderatore: Toki

Regole del forum
Leggi: IProgrammatori.it - Regolamento Forum
KuroKami69
Utente Semi-Senior
Messaggi: 124
Iscritto il: 14 ott 2017, 16:25

Jframe & jtable

Messaggioda KuroKami69 » 05 nov 2017, 14:36

Bene eccomi di nuovo a voi, pronto per farmi nuovamente rimproverare :D
questa volta vorrei chiedere dei chiarimenti, al momento a livello logico
allora, per dare il tocco finale alla classe automobili, ve ne ricordate ne sono sicuro, volevo creare una (si dice gui??) finestra con dentro una tabella che mostra i vari attributi delle auto e delle moto (la classe moto sarà sostanzialmente identica a quella auto), e quindi avere la possibilità tramite una minilista o un radiobutton di scegliere se vedere auto o moto.
quindi per prima cosa immagino dovrò creare una tabella giusto? da inserire poi nel frame
per gli oggetti Automobile e Moto, mappati con una hashtable, devo prima crearne un tot e poi passare i vari oggetti alla tabella?
cioè io sono abbastanza confuso, in html bastava fare un bel for con <tr> e <td> e le popolavo con php prendendo i dati da un db.
qua ho provato a leggere qualcosa sulle tabelle ma devo ammettere che ho capito poco e niente, quindi sono molto confuso riguardo alla realizzazione di una tabella popolata da attributi di vari oggetti.
so che alcuni di voi (@migliorabile, @andbin e forse altri :D) mi diranno "studia prima di provare ad applicare, prendi i libri e studia" o roba simile, quindi prima di provare a fare qualcosa sto provando a capire come fare. potreste darmi qualche dritta per favore? lascio una breve lista di quello che vorrei fare

- creae un jframe la cui dimensione si adatti al contenuto, da usare per visualizzare una tabella (la creazione di un jframe la so fare, dopo non so ancora bene come manipolarlo)
- creare una tabella di n righe, credo massimo 20, e tante colonne quanti gli attributi delle mie classi Automobili e Moto
- avere la possibilità, cliccando sul titolo della colonna (non so come si chiama in gergo quindi, per fare un esempio, avrò la colonna "marca") di ordinare i dati in ordine crescente o decrescente
- mettere o un radiobutton oppure un mini menu a tendina con 2 valori, che a seconda di quello che scelgo mi visualizzerà nella tabella le auto oppure le moto

spero di poter ancora una volta contare sul vostro aiuto :)
Avatar utente
andbin
Utente Senior
Messaggi: 2904
Iscritto il: 30 ott 2013, 21:51
Località: Torino
Contatta:

Re: Jframe & jtable

Messaggioda andbin » 05 nov 2017, 14:50

KuroKami69 ha scritto:qua ho provato a leggere qualcosa sulle tabelle ma devo ammettere che ho capito poco e niente, quindi sono molto confuso riguardo alla realizzazione di una tabella popolata da attributi di vari oggetti.

Purtroppo JTable è uno dei componenti Swing più complessi (l'altro componente molto complesso è JTree ma si usa molto di meno) e richiede la conoscenza di un po' di concetti prima di poterlo maneggiare con scioltezza.

KuroKami69 ha scritto:quindi prima di provare a fare qualcosa sto provando a capire come fare. potreste darmi qualche dritta per favore?

Innanzitutto COSA hai letto (indica pure siti/discussioni che hai visto)? E quali sono i tuoi dubbi?
O forse preferisci che io o altri ti facciamo una breve spiegazione su come funziona JTable?


KuroKami69 ha scritto:- creae un jframe la cui dimensione si adatti al contenuto, da usare per visualizzare una tabella (la creazione di un jframe la so fare, dopo non so ancora bene come manipolarlo)

Ok.

KuroKami69 ha scritto:- creare una tabella di n righe, credo massimo 20, e tante colonne quanti gli attributi delle mie classi Automobili e Moto

Ok

KuroKami69 ha scritto:- avere la possibilità, cliccando sul titolo della colonna (non so come si chiama in gergo quindi, per fare un esempio, avrò la colonna "marca") di ordinare i dati in ordine crescente o decrescente

Ok, fattibile. In JTable ogni colonna ha una intestazione (si chiama tecnicamente "header"). L'ordinamento dei dati in JTable è fattibile a vari livelli e tra l'altro bisogna anche vedere per quale release di Java. Da Java 6 sono state introdotte delle funzionalità in JTable per agevolare l'ordinamento.

KuroKami69 ha scritto:- mettere o un radiobutton oppure un mini menu a tendina con 2 valori, che a seconda di quello che scelgo mi visualizzerà nella tabella le auto oppure le moto

Ok, fattibile.
Andrea, www.andbin.net — Senior Java developer — SCJP 5 (91%) – SCWCD 5 (94%)
Il mio blog sulla programmazione
KuroKami69
Utente Semi-Senior
Messaggi: 124
Iscritto il: 14 ott 2017, 16:25

Re: Jframe & jtable

Messaggioda KuroKami69 » 05 nov 2017, 14:55

andbin ha scritto:
KuroKami69 ha scritto:qua ho provato a leggere qualcosa sulle tabelle ma devo ammettere che ho capito poco e niente, quindi sono molto confuso riguardo alla realizzazione di una tabella popolata da attributi di vari oggetti.

Purtroppo JTable è uno dei componenti Swing più complessi (l'altro componente molto complesso è JTree ma si usa molto di meno) e richiede la conoscenza di un po' di concetti prima di poterlo maneggiare con scioltezza.

KuroKami69 ha scritto:quindi prima di provare a fare qualcosa sto provando a capire come fare. potreste darmi qualche dritta per favore?

Innanzitutto COSA hai letto (indica pure siti/discussioni che hai visto)? E quali sono i tuoi dubbi?
O forse preferisci che io o altri ti facciamo una breve spiegazione su come funziona JTable?

ho bhe ho scaricato un pdf, che ora non mi ricordo dove l'ho preso, ma che allego, e ho dato una letta a questo sito, ma essendo in inglese non ho capito molto.
se foste così gentili da farmi voi una breve spiegazione, sono sicuro che potrei imparare molto :)


andbin ha scritto:
KuroKami69 ha scritto:- creae un jframe la cui dimensione si adatti al contenuto, da usare per visualizzare una tabella (la creazione di un jframe la so fare, dopo non so ancora bene come manipolarlo)

Ok.

KuroKami69 ha scritto:- creare una tabella di n righe, credo massimo 20, e tante colonne quanti gli attributi delle mie classi Automobili e Moto

Ok

KuroKami69 ha scritto:- avere la possibilità, cliccando sul titolo della colonna (non so come si chiama in gergo quindi, per fare un esempio, avrò la colonna "marca") di ordinare i dati in ordine crescente o decrescente

Ok, fattibile. In JTable ogni colonna ha una intestazione (si chiama tecnicamente "header"). L'ordinamento dei dati in JTable è fattibile a vari livelli e tra l'altro bisogna anche vedere per quale release di Java. Da Java 6 sono state introdotte delle funzionalità in JTable per agevolare l'ordinamento.

ci credi che all'inizio stavo scrivendo header, ma poi ho pensato fosse sbagliato e ho preferito quindi usare un termine "universale"?
attualmente sto usando java 7, quindi non credo ci siano problemi per questo giusto?

andbin ha scritto:
KuroKami69 ha scritto:- mettere o un radiobutton oppure un mini menu a tendina con 2 valori, che a seconda di quello che scelgo mi visualizzerà nella tabella le auto oppure le moto

Ok, fattibile.


allego anche un pdf per i jframe che ho trovato.
grazie per la disponibilità e la cortesia :)
Allegati

[L’estensione pdf è stata disattivata e non può essere visualizzata.]

[L’estensione pdf è stata disattivata e non può essere visualizzata.]

Avatar utente
andbin
Utente Senior
Messaggi: 2904
Iscritto il: 30 ott 2013, 21:51
Località: Torino
Contatta:

Re: Jframe & jtable

Messaggioda andbin » 05 nov 2017, 15:28

KuroKami69 ha scritto:ho bhe ho scaricato un pdf, che ora non mi ricordo dove l'ho preso, ma che allego, e ho dato una letta a questo sito, ma essendo in inglese non ho capito molto.
se foste così gentili da farmi voi una breve spiegazione, sono sicuro che potrei imparare molto :)

Il link è quello del tutorial ufficiale su JTable. Lì come concetti in effetti c'è TUTTO ma è appunto in inglese e quindi andrebbe compreso bene. L'ultimo documento linkato (TabelleJTable.pdf) è in italiano ma ad una occhiata veloce lo trovo scarno e poco descrittivo (oltre al fatto che gli esempi di codice non sono formattati al meglio)


Ok, ecco una breve infarinatura. Swing, in generale, è stato modellato fin dall'inizio sul pattern MVC (Model View Controller). Se non sai nulla di questo, non è un problema. Si può capire JTable anche senza avere nozioni esatte sul MVC. In sostanza il MVC è un pattern che descrive una architettura in cui ci sono entità (tre) ben distinte ciascuna con un preciso compito: il Model ("modello", che contiene dei dati), la View ("vista", che presenta i dati all'utente) e il Controller ("controllore" che riceve l'input dall'utente ed agisce di conseguenza).

In Swing, salvo alcuni componenti super-basilari come JLabel, per tutti gli altri componenti viene usata questa architettura in maniera completa. E JTable non è da meno. Ripeto che puoi ignorare un po' il MVC, non è importante. Quello che è importante è questo di seguito.

La cosa importante da sapere su JTable è che i dati NON sono contenuti direttamente nell'oggetto JTable. È un'altra entità che li contiene, che si chiama "table model" ed è rappresentata al livello più astratto da una interfaccia che si chiama appunto TableModel.

All'interno di JTable c'è il riferimento ad un oggetto "visto" genericamente appunto tramite l'interfaccia TableModel. In qualunque modo arrivi a creare un JTable, alla fin fine c'è sotto sotto un table model implicito o esplicito che sia.

JTable non "sa" nulla a priori di come è fatta la tabella. Tutte le informazioni importanti sulla struttura della tabella le CHIEDE al table model. E l'obiettivo della interfaccia TableModel è appunto quello di "esporre" tutte queste informazioni. Se guardi la documentazione di TableModel (vedi qui) trovi svariati metodi tra cui:

- getRowCount()
- getColumnCount()
- getColumnName(int columnIndex)
ecc...

Questi metodi servono appunto per descrivere come è fatta la tabella. Durante il ciclo di vita di JTable, esso chiede man mano e più volte queste informazioni al table model: "quante righe hai?" ( tm.getRowCount() ) ; "quante colonne hai?" ( tm.getColumnCount() ) ; "come si chiama la colonna indice 2?" ( tm.getColumnName(2) ) ecc...

Con queste nozioni JTable è in grado di renderizzare e strutturare visivamente la tabella. Quindi quando si vuole utilizzare JTable l'aspetto iniziale più importante è stabilire QUALE table model utilizzare. Come ho detto TableModel è una interface Java. E ci possono essere quindi N implementazioni.

Fin qui è più chiaro?
Andrea, www.andbin.net — Senior Java developer — SCJP 5 (91%) – SCWCD 5 (94%)
Il mio blog sulla programmazione
KuroKami69
Utente Semi-Senior
Messaggi: 124
Iscritto il: 14 ott 2017, 16:25

Re: Jframe & jtable

Messaggioda KuroKami69 » 05 nov 2017, 16:02

Più o meno, riasusmendo, è tablemodel, un modello astratto, che passa a jtable tutte le informazioni strutturali sulla tabella, quindi righe, colonne, header ecc.
e tutti i dati che popolano tali tabelle vengono soltanto richiamati da terze parti. oppure sempre da table model? mmh
per fare un esempio se io volessi avere 20 header, mmh dovrò passare a tablemodel un array, una lista, quello che è, con quello che voglio usare come header giusto?
sostanzialmente dovrò passare a tablemodel tutti i dati della tabella, compresi i suoi valori, e poi jtable li richiamerà tramite i metodi di tablemodel giusto?
Avatar utente
andbin
Utente Senior
Messaggi: 2904
Iscritto il: 30 ott 2013, 21:51
Località: Torino
Contatta:

Re: Jframe & jtable

Messaggioda andbin » 05 nov 2017, 16:32

KuroKami69 ha scritto:Più o meno, riasusmendo, è tablemodel, un modello astratto, che passa a jtable tutte le informazioni strutturali sulla tabella, quindi righe, colonne, header ecc.
e tutti i dati che popolano tali tabelle vengono soltanto richiamati da terze parti. oppure sempre da table model? mmh

Il table model "espone" all'esterno tutte le informazioni sulla struttura (numero di righe/colonne, editabilità delle celle, nomi delle colonne ecc..) E i dati.
Queste informazioni vengono usate principalmente da JTable solo attraverso la interfaccia TableModel. Un table model "concreto" può avere metodi aggiuntivi (di cui JTable non "sa" ovviamente nulla) che vengono tipicamente usati "programmaticamente" dal programmatore per fare cose aggiuntive/extra.

KuroKami69 ha scritto:per fare un esempio se io volessi avere 20 header, mmh dovrò passare a tablemodel un array, una lista, quello che è, con quello che voglio usare come header giusto?

sostanzialmente dovrò passare a tablemodel tutti i dati della tabella, compresi i suoi valori, e poi jtable li richiamerà tramite i metodi di tablemodel giusto?

La questione non è tanto "passare" (dipende) ma scegliere QUALE implementazione di table model usare. Il framework fornisce solo una implementazione concreta un po' "generica" che si chiama DefaultTableModel.

Per qualunque altra esigenza particolare tipicamente si estende AbstractTableModel che funge da base con già alcune cose implementate.
Andrea, www.andbin.net — Senior Java developer — SCJP 5 (91%) – SCWCD 5 (94%)
Il mio blog sulla programmazione
KuroKami69
Utente Semi-Senior
Messaggi: 124
Iscritto il: 14 ott 2017, 16:25

Re: Jframe & jtable

Messaggioda KuroKami69 » 05 nov 2017, 16:41

Ok, allora la domanda forse può risultare ignorante, ma cosa intendi per "QUALE implementazione di table model usare."?
EDIT:
le implementazioni, intendi la default, e la abstract?
scusami, questa domanda potrà sembrare fuori luogo, ma potresti per cortesia farmi un esempio con del pseudo codice di come dovrebbe funzionare quello che vorrei fare io?
perché senza avere almeno un minimo di "sviluppo" su sui confrontare anche quello che mi dici, mi esce difficile comprendere al meglio.
o meglio, diciamo che quello che mi hai detto fino ad ora bene o male l'ho capito, ma continuo a non capire come realizzare il tutto
devo creare un oggetto tablemodel? oppure devo farmi una classe a parte, chiamata chessò, tabella, istanziare la dentro il mio modello di tabella e poi nel main istanziare questa nuova classe?
ci passo la mia hashmap, ma poi devo farmi delle arraylist per ogni attributo delle mie auto e moto, e popolarle, o cosa?
cioè io ho bisogno di poter immaginare come funziona a livello di codice, per poterci associare la teoria
faccio un esempio proprio banale eh.
se non avessi mai visto un linguaggio di programmazione prima d'ora e mi dicessi che il ciclo for è un ciclo di vita definita, e che al suo interno si possono fare cose, farei fatica a immaginarmi nella pratica come fare
se invece mi facessi un esempio del tipo
for ("condizioni di esistenza del ciclo) //solitamente si ha un indice, una condizione e un incremento
{
cosa vuoi fare
}
capirei molto meglio.
sarebbe possibile avere una cosa simile anche per jtable?
Avatar utente
andbin
Utente Senior
Messaggi: 2904
Iscritto il: 30 ott 2013, 21:51
Località: Torino
Contatta:

Re: Jframe & jtable

Messaggioda andbin » 05 nov 2017, 17:16

KuroKami69 ha scritto:Ok, allora la domanda forse può risultare ignorante, ma cosa intendi per "QUALE implementazione di table model usare."?
EDIT:
le implementazioni, intendi la default, e la abstract?

DefaultTableModel è una classe concreta, è istanziabile ed usabile direttamente. Ma ha una sua struttura dati interna che è molto de-strutturata e non object-oriented perché è semplicemente un Vector di Vector di Object.

AbstractTableModel è una classe astratta, NON è usabile direttamente e va ESTESA per poter fare qualcosa di concreto. In particolare la struttura dati interna la devi fornire ed implementare tu.
Andrea, www.andbin.net — Senior Java developer — SCJP 5 (91%) – SCWCD 5 (94%)
Il mio blog sulla programmazione
KuroKami69
Utente Semi-Senior
Messaggi: 124
Iscritto il: 14 ott 2017, 16:25

Re: Jframe & jtable

Messaggioda KuroKami69 » 05 nov 2017, 17:30

andbin ha scritto:
KuroKami69 ha scritto:Ok, allora la domanda forse può risultare ignorante, ma cosa intendi per "QUALE implementazione di table model usare."?
EDIT:
le implementazioni, intendi la default, e la abstract?

DefaultTableModel è una classe concreta, è istanziabile ed usabile direttamente. Ma ha una sua struttura dati interna che è molto de-strutturata e non object-oriented perché è semplicemente un Vector di Vector di Object.

AbstractTableModel è una classe astratta, NON è usabile direttamente e va ESTESA per poter fare qualcosa di concreto. In particolare la struttura dati interna la devi fornire ed implementare tu.


mmh comincio a capire.
sostanzialmentela default ha già dei metodi pronti mentre pr la abstract la devo estendere e farci i metodi che mi servon? se intendi questo per struttura di dati interna mmh
KuroKami69
Utente Semi-Senior
Messaggi: 124
Iscritto il: 14 ott 2017, 16:25

Re: Jframe & jtable

Messaggioda KuroKami69 » 05 nov 2017, 17:35

Per fare un esempio concreto
questo codice arriva dalla guida java oracle

Codice: Seleziona tutto

new AbstractTableModel() {
    public String getColumnName(int col) {
        return columnNames[col].toString();
    }
    public int getRowCount() { return rowData.length; }
    public int getColumnCount() { return columnNames.length; }
    public Object getValueAt(int row, int col) {
        return rowData[row][col];
    }
    public boolean isCellEditable(int row, int col)
        { return true; }
    public void setValueAt(Object value, int row, int col) {
        rowData[row][col] = value;
        fireTableCellUpdated(row, col);
    }
}

sostanzialmente con questo codice io sto scegliendo di usare l'implementazione abstract giusto?
Avatar utente
andbin
Utente Senior
Messaggi: 2904
Iscritto il: 30 ott 2013, 21:51
Località: Torino
Contatta:

Re: Jframe & jtable

Messaggioda andbin » 05 nov 2017, 17:44

KuroKami69 ha scritto:mentre pr la abstract la devo estendere e farci i metodi che mi servon? se intendi questo per struttura di dati interna mmh

Purtroppo il tempo è poco e si dovrebbe dire 10 volte di più. Ma giusto per farti capire: in AbstractTableModel il Object getValueAt(int row, int column) NON è implementato. Lo devi fornire tu.

E se "qualcuno" (JTable) dall'esterno ti chiede: dammi il dato alla riga 5, colonna 2 ... che fai? Appunto, se estendi AbstractTableModel la struttura dati ce la metti tu (a JTable NON interessa quale/come sia, basta che rispondi appropriatamente alle richieste).

Potrebbe essere un List<Automobile> o un Automobile[] nel qual caso il getValueAt sarà qualcosa tipo: prendo l'oggetto Automobile all'indice row e se il column è 0 tiro fuori il modello, se è 1 tiro fuori la marca, ecc...
Oppure la struttura dati potrebbe essere ancora un'altra.
Andrea, www.andbin.net — Senior Java developer — SCJP 5 (91%) – SCWCD 5 (94%)
Il mio blog sulla programmazione
KuroKami69
Utente Semi-Senior
Messaggi: 124
Iscritto il: 14 ott 2017, 16:25

Re: Jframe & jtable

Messaggioda KuroKami69 » 05 nov 2017, 17:55

Mmh
capisco
quello che non mi è chiaro è come usare la mia hashtable
per dire, per gestire bene questa cosa e non avere tutto nel main, mi posso fare una classe tabella che estende AbstractTableModel, infilarci dentro un ciclo che mi genera n automobili e n moto, e queste vanno a finire tutte nella hastable giusto?
poi da qua come mi devo muovere?
creo una lista di header, e fino a qua penso non ci siano dubbi.
ma poi devo fare una cosa del tipo

Codice: Seleziona tutto

 public void setValueAt(Object value, int row, int col) {
        rowData[row][col] = value;
        fireTableCellUpdated(row, col); //non ho capito a cosa serve onestamente
    }

preso brutalmente dal codice sopra.
e poi un

Codice: Seleziona tutto

for (int i = 0; i < di qualcosa; i++)
{
for (int k = 0; k < di qualcosa; k++)
{
setValueAt( mappaAuto.get("auto" + i).getTipo(), i, k);
}
}

certo così è incoerente perché mi assegnerà a ogni posizione sempre la stessa informazione, quindi al momento riesco a immaginare, sempre se questa struttura è corretta, come forma, di fare un for per ogni attributo e fare l'assegnazione. anzi a ben pensarci è incoerente, visto che tutti i dati che passo fanno parte di un unica colonna e non riga, quindi dovrei "bloccare" la colonna e incrementare le righe mmh comunque...
più o meno dovrei fare una cosa simile giusto? però io questi dati li passo alla matrice rowData, che sarà sostanzialmente la mia tabella giusto?
KuroKami69
Utente Semi-Senior
Messaggi: 124
Iscritto il: 14 ott 2017, 16:25

Re: Jframe & jtable

Messaggioda KuroKami69 » 05 nov 2017, 18:50

Quale di questi mi consigli? il mio manuale l'ho comprato 4 anni fa, forse anche anche di più, volevo prenderne uno quantomeno aggiornato alla versione 8
Avatar utente
andbin
Utente Senior
Messaggi: 2904
Iscritto il: 30 ott 2013, 21:51
Località: Torino
Contatta:

Re: Jframe & jtable

Messaggioda andbin » 05 nov 2017, 22:23

KuroKami69 ha scritto:per gestire bene questa cosa e non avere tutto nel main, mi posso fare una classe tabella che estende AbstractTableModel

Certo, anzi, assolutamente! Separare e incapsulare bene le cose è uno dei capisaldi della OOP.

KuroKami69 ha scritto:infilarci dentro un ciclo che mi genera n automobili e n moto, e queste vanno a finire tutte nella hastable giusto?

Nella implementazione del table model non ci devi mettere alcun ciclo, tantomeno per generare quegli oggetti. Gli oggetti li dovrai generare altrove. Il table model deve solo principalmente (e tipicamente) contenere la struttura dati ed "esporla".

KuroKami69 ha scritto:poi da qua come mi devo muovere?

Dovresti comprendere meglio i table model .... credo non hai ancora afferrato il senso generale complessivo.

KuroKami69 ha scritto:ma poi devo fare una cosa del tipo

Codice: Seleziona tutto

 public void setValueAt(Object value, int row, int col) {
        rowData[row][col] = value;
        fireTableCellUpdated(row, col); //non ho capito a cosa serve onestamente
    }

Il setValueAt serve per settare il valore di una cella nel table model. Chiaramente la struttura dati nel table model va innanzitutto aggiornata. Il rowData[row][col] come esempio è per un array bidimensionale ma la struttura dati potrebbe essere un'altra.

Poi va fatto il fireTableCellUpdated. Una cosa che non hai ancora appreso: nell'ottica MVC quando "qualcosa" cambia nel model, la "vista" deve essere prontamente aggiornata. Questo avviene tramite eventi. Il JTable si registra presso il table model tramite il addTableModelListener e quindi può ricevere gli eventi. Quando nel table model aggiorni una cella nella struttura, il fireTableCellUpdated dice ai listener registrati "ehi, c'è una cella che è stata aggiornata!". JTable che è uno (il primo) dei listener aggiorna quindi la vista.


KuroKami69 ha scritto:preso brutalmente dal codice sopra.
e poi un

Codice: Seleziona tutto

for (int i = 0; i < di qualcosa; i++)
{
for (int k = 0; k < di qualcosa; k++)
{
setValueAt( mappaAuto.get("auto" + i).getTipo(), i, k);
}
}

Continui a parlare di hashtable e qui vedo un mappaAuto usato in doppio ciclo per righe/colonne. Questo serve a ben poco e non è per nulla object-oriented.

Devi pensare più in ottica OOP, gestisci es. un List<Automobile> o qualcosa del genere. Una hashtable NON ti serve sicuramente dentro il table model e credo nemmeno fuori.


KuroKami69 ha scritto:Quale di questi mi consigli?

Il De Sio Cesari è spesso ben citato sui forum Java. Prendi pure questo.
Andrea, www.andbin.net — Senior Java developer — SCJP 5 (91%) – SCWCD 5 (94%)
Il mio blog sulla programmazione
KuroKami69
Utente Semi-Senior
Messaggi: 124
Iscritto il: 14 ott 2017, 16:25

Re: Jframe & jtable

Messaggioda KuroKami69 » 05 nov 2017, 22:40

andbin ha scritto:
KuroKami69 ha scritto:per gestire bene questa cosa e non avere tutto nel main, mi posso fare una classe tabella che estende AbstractTableModel

Certo, anzi, assolutamente! Separare e incapsulare bene le cose è uno dei capisaldi della OOP.

KuroKami69 ha scritto:infilarci dentro un ciclo che mi genera n automobili e n moto, e queste vanno a finire tutte nella hastable giusto?

Nella implementazione del table model non ci devi mettere alcun ciclo, tantomeno per generare quegli oggetti. Gli oggetti li dovrai generare altrove. Il table model deve solo principalmente (e tipicamente) contenere la struttura dati ed "esporla".

KuroKami69 ha scritto:poi da qua come mi devo muovere?

Dovresti comprendere meglio i table model .... credo non hai ancora afferrato il senso generale complessivo.

forse no. mmh il concetto dovrebbe essere che essi forniscono la struttura della tabella, se non sto prendendo una cantonata enorme

andbin ha scritto:
KuroKami69 ha scritto:ma poi devo fare una cosa del tipo

Codice: Seleziona tutto

 public void setValueAt(Object value, int row, int col) {
        rowData[row][col] = value;
        fireTableCellUpdated(row, col); //non ho capito a cosa serve onestamente
    }

Il setValueAt serve per settare il valore di una cella nel table model. Chiaramente la struttura dati nel table model va innanzitutto aggiornata. Il rowData[row][col] come esempio è per un array bidimensionale ma la struttura dati potrebbe essere un'altra.

Poi va fatto il fireTableCellUpdated. Una cosa che non hai ancora appreso: nell'ottica MVC quando "qualcosa" cambia nel model, la "vista" deve essere prontamente aggiornata. Questo avviene tramite eventi. Il JTable si registra presso il table model tramite il addTableModelListener e quindi può ricevere gli eventi. Quando nel table model aggiorni una cella nella struttura, il fireTableCellUpdated dice ai listener registrati "ehi, c'è una cella che è stata aggiornata!". JTable che è uno (il primo) dei listener aggiorna quindi la vista.


KuroKami69 ha scritto:preso brutalmente dal codice sopra.
e poi un

Codice: Seleziona tutto

for (int i = 0; i < di qualcosa; i++)
{
for (int k = 0; k < di qualcosa; k++)
{
setValueAt( mappaAuto.get("auto" + i).getTipo(), i, k);
}
}

Continui a parlare di hashtable e qui vedo un mappaAuto usato in doppio ciclo per righe/colonne. Questo serve a ben poco e non è per nulla object-oriented.

Devi pensare più in ottica OOP, gestisci es. un List<Automobile> o qualcosa del genere. Una hashtable NON ti serve sicuramente dentro il table model e credo nemmeno fuori.

bhe ma io voglio creare n oggetti automobile, senza doverli istanziare uno a uno, e quindi ho usato una hashtable per fare questo. dopo i valori di ogni singola auto generata li voglio visualizzare su una tabella.
ok forse posso generare le auto anche nel main, oppure magari farò un'altra classe ancora, anche se non riesco a immaginare il complesso, ma poi per visualizzare/assegnare ogni singolo valore delle mie auto, sarà quello il procedimento no? che io scelga di creare un arraylist o una lista, dentro a tale struttura sarà comunque presente la mia auto mappata, per cui la struttura è quella citata qua sopra, bene o male no? o forse sto ancora fraintendendo qualcosa..?


andbin ha scritto:
KuroKami69 ha scritto:Quale di questi mi consigli?

Il De Sio Cesari è spesso ben citato sui forum Java. Prendi pure questo.


ho visto che a fine febbraio esce quello sulla versione 9, mi conviene aspettare e intanto arrangiarmi con quello che ho, tanto la teoria è sempre uguale no? oppure prendere quello sulla versione 8?

Torna a “Java”

Chi c’è in linea

Visitano il forum: andbin, DiegoMilito32 e 34 ospiti