PDA

View Full Version : [Java] Editor IDE


Vyman
23-09-2007, 14:31
Tempo fa ho provato il NetBeans. Devo dire che non mi è piaciuto molto, specie perchè nella fase di disegno non si possono usare gli array.
Siccome mi serve un IDE soprattutto in fase di disegno layout, in modo che io metta a mano gli oggetti e mi venga fornito il codice, avete qualche programma (magari free) da suggerire?

isAlreadyInUse
23-09-2007, 17:00
Eclipse

Vyman
23-09-2007, 17:13
Eclipse

Ho provato a scaricarlo (entrambe le versioni, JEE e non) però non capisco mica come funziona :mc:

isAlreadyInUse
23-09-2007, 17:28
Allora ti conviere usare notepad

Vyman
23-09-2007, 18:13
ma con eclipse si possono usare array di elementi?

franksisca
24-09-2007, 08:29
ma con eclipse si possono usare array di elementi?

scusa....ma in che senso array di elementi????

Vyman
24-09-2007, 09:25
scusa....ma in che senso array di elementi????

Allora, io spesso sviluppo software per l'utilizzo di statistiche, e quindi per comodità nell'immagazzinare dati uso array (o molto più spesso matrici pluridimensionali), che sono ad esempio: JLabel[] o JTextField[][] ect ect.

Di netbeans non mi piaceva appunto il fatto che dovevo inserire un elemento alla volta, copiarmi il codice, e poi andare a sostituire ogni volta gli elementi con i relativi indici dei miei array...

Mi chiedevo se invece eclipse era in grado di fare questa cosa automaticamente.

franksisca
24-09-2007, 10:28
Allora, io spesso sviluppo software per l'utilizzo di statistiche, e quindi per comodità nell'immagazzinare dati uso array (o molto più spesso matrici pluridimensionali), che sono ad esempio: JLabel[] o JTextField[][] ect ect.

Di netbeans non mi piaceva appunto il fatto che dovevo inserire un elemento alla volta, copiarmi il codice, e poi andare a sostituire ogni volta gli elementi con i relativi indici dei miei array...

Mi chiedevo se invece eclipse era in grado di fare questa cosa automaticamente.

ah....ecco, allora avevo capito bene, non credo, o meglio, non lò mai usato epr quello


P.S. il lò è bellissimo :D:D:D:D

Vyman
24-09-2007, 10:59
ah....ecco, allora avevo capito bene, non credo, o meglio, non lò mai usato epr quello


P.S. il lò è bellissimo :D:D:D:D

e sai mica se in giro ci sono altri IDE adatti al mio scopo?

O in alternativa una soluzione migliore, è parecchio fastidioso/noiosi/laborioso fare i layout a manina...

franksisca
24-09-2007, 11:02
e sai mica se in giro ci sono altri IDE adatti al mio scopo?

O in alternativa una soluzione migliore, è parecchio fastidioso/noiosi/laborioso fare i layout a manina...

che io sappia no, ma magari anche eclipse lo fà, io, al contrario di te, preferisco fare tutto a manina, non uso nemmeno l'editor di eclipse che ho, ma queste sono cinvinioni personali, sono rimasto traumatizzato da JBuilder, e dopo di allora aborro tutti gli editor grafici....

Vyman
24-09-2007, 11:04
che io sappia no, ma magari anche eclipse lo fà, io, al contrario di te, preferisco fare tutto a manina, non uso nemmeno l'editor di eclipse che ho, ma queste sono cinvinioni personali, sono rimasto traumatizzato da JBuilder, e dopo di allora aborro tutti gli editor grafici....

eh per le cose piccole faccio anche io a manina, ma quando comincio a dover fare statistiche su matrici quadridimensionali la cosa mi piace poco :muro:

Guille
25-09-2007, 12:24
Allora, io spesso sviluppo software per l'utilizzo di statistiche, e quindi per comodità nell'immagazzinare dati uso array (o molto più spesso matrici pluridimensionali), che sono ad esempio: JLabel[] o JTextField[][] ect ect.

:confused:
Presumendo che tu, parlando di array di JLabel e/o JTextField, per immagazzinare intenda visualizzare, non sarebbe molto piu semplice utilizzare una JTable al posto di array di JLabel e/o di JtextField ?

Vyman
25-09-2007, 12:50
:confused:
Presumendo che tu, parlando di array di JLabel e/o JTextField, per immagazzinare intenda visualizzare, non sarebbe molto piu semplice utilizzare una JTable al posto di array di JLabel e/o di JtextField ?

Beh ovviamente prima di visualizzare dei dati bisogna anche immagazzinarli :D
Onestamente non mi ricordo come funziona una JTable, ma presumo che sia una sorta di "tabella unita".
E a volte mi capita che non sempre tutti gli elementi debbano stare uniti od ordinati in un modo prestabilito...

Guille
25-09-2007, 17:02
Beh ovviamente prima di visualizzare dei dati bisogna anche immagazzinarli :D
Ovviamente :D .... come ovviamente mi aspetto che i dati tu li abbia immagazzinati in array di int/long/double/String/ecc. a seconda del tipo di dati e non direttamente nelle JLabel/JTextField .... vero ?? :eek:
Onestamente non mi ricordo come funziona una JTable, ma presumo che sia una sorta di "tabella unita".
E a volte mi capita che non sempre tutti gli elementi debbano stare uniti od ordinati in un modo prestabilito...

Per i dettagli e l'uso dei vari componenti swing vedi qui (http://java.sun.com/docs/books/tutorial/uiswing/components/index.html) :O

Vyman
25-09-2007, 20:56
Ovviamente :D .... come ovviamente mi aspetto che i dati tu li abbia immagazzinati in array di int/long/double/String/ecc. a seconda del tipo di dati e non direttamente nelle JLabel/JTextField .... vero ?? :eek:




Per i dettagli e l'uso dei vari componenti swing vedi qui (http://java.sun.com/docs/books/tutorial/uiswing/components/index.html) :O

come immaginavo non è proprio il massimo per quel che devo fare :(

restando in tema, quella guida l'ho usata più volte, ma non riesco a capire una cosa:
i testi dei Label, possono essere scritti
"
c
o
s
ì"
anzichè "così"? Se sì, come?

Guille
26-09-2007, 09:07
restando in tema, quella guida l'ho usata più volte, ma non riesco a capire una cosa:
i testi dei Label, possono essere scritti
"
c
o
s
ì"
anzichè "così"? Se sì, come?

Che io sappia direttamente no ma potresti ovviare passanto il testo al JLabel in formato html:
JLabel label = new JLabel("<HTML>P<br>r<br>o<br>v<br>a</HTML>");

Vyman
26-09-2007, 10:13
Che io sappia direttamente no ma potresti ovviare passanto il testo al JLabel in formato html:
JLabel label = new JLabel("<HTML>P<br>r<br>o<br>v<br>a</HTML>");

Alla grande, grazie!

Vyman
27-09-2007, 16:47
Tornando al buon vecchio eclipse, lo scarico, lo faccio partire, a fatica seguo il tutorial (c'ho messo na vita a scaricare la roba aggiuntiva)...
ma, come si fa invece di scrivere il codice, a posizionare a mano gli oggetti in un frame per ottenere il codice? :confused:

isAlreadyInUse
27-09-2007, 16:48
Ce l'hai il visual editor?

Vyman
27-09-2007, 16:54
Ce l'hai il visual editor?

così a naso direi proprio di no...

ho scaricato solo questo file eclipse-jee-europa-win32.zip

ah, e che differenza c'è con questo? eclipse-java-europa-win32.zip

franksisca
27-09-2007, 17:28
Ce l'hai il visual editor?

è un plugin per creare progetti visuali ;)

scaricalo da qui;)

http://download.eclipse.org/tools/ve/downloads/index.php

Vyman
27-09-2007, 17:37
è un plugin per creare progetti visuali ;)

scaricalo da qui;)

http://download.eclipse.org/tools/ve/downloads/index.php

scaricarlo l'ho scaricato... ad usarlo è un pò più un problema :muro:

cioè non riesco mica a capire come aggiungerlo... quello SWT l'ha importato al volo, questo no

isAlreadyInUse
27-09-2007, 17:58
Come core niente, cambiano solo i plugin aggiunti

Vyman
27-09-2007, 18:01
ok, e per aggiungere sto plugin?

ho il file VE-runtime-1.2.3_jem.zip ma non riesco a farci niente...

isAlreadyInUse
27-09-2007, 18:08
Provato ad aprirlo?

Vyman
27-09-2007, 18:10
Provato ad aprirlo?

sì, dentro non c'è niente di eseguibile, ci sono altre cartelle "features" e "plugin", tanti file jar, ma niente di utile...

A meno che non abbia sbagliato file da scaricare :muro:

isAlreadyInUse
27-09-2007, 18:29
Niente di utile??????????
prova ad aprire la cartella dove sta eclipse e fammi sapere che cartelle vedi :mbe:

Vyman
27-09-2007, 18:33
Niente di utile??????????
prova ad aprire la cartella dove sta eclipse e fammi sapere che cartelle vedi :mbe:

onde evitare ti metto l'immagine così mi dici al volo:
http://img249.imageshack.us/img249/1739/immaginesj0.jpg

isAlreadyInUse
27-09-2007, 18:45
Vedi quelle belle cartelle plugin e features ci butti dento quello contenuto nelle stesse cartelle che erano nello zip

Vyman
27-09-2007, 18:48
Vedi quelle belle cartelle plugin e features ci butti dento quello contenuto nelle stesse cartelle che erano nello zip

Fatto!!
ho fatto partire eclipse... ora cosa devo fare?

isAlreadyInUse
27-09-2007, 19:30
Intraprendenza 0

Vyman
27-09-2007, 19:46
Intraprendenza 0

anche l'utilità delle risposte :muro:

Le chiedo perdono se non noto differenza alcuna ne pulsantini vari con aggiunta plugin/start visual editor.

Chiederò a qualcuno più paziente.

PGI-Bis
27-09-2007, 20:04
Qui c'è scritto come installare il plug-in avvalendosi dell'aggiornamento automatico. Ti conviene usarlo perchè sembra che serva più di un modulo per poter usare il VE

http://www.eclipse.org/vep/WebContent/faq.html#install_howto

Vyman
27-09-2007, 20:32
Qui c'è scritto come installare il plug-in avvalendosi dell'aggiornamento automatico. Ti conviene usarlo perchè sembra che serva più di un modulo per poter usare il VE

http://www.eclipse.org/vep/WebContent/faq.html#install_howto

proprio quel che mi serviva!!
provo subito grazie mille!!

Vyman
27-09-2007, 21:23
mi sa che son proprio pacco...
ho seguito tutte le istruzioni, scaricato tutto, aggiornato tutto.
Aggiunto il plug-in al progetto.
e mo come si fa partire? :muro:
se creo una nuova classe si apre la normale area per il codice...

isAlreadyInUse
27-09-2007, 21:27
Ti dovrebbe dare new->Visual calss

isAlreadyInUse
27-09-2007, 21:29
http://openroom.dyndns.org/T01/images/Immagine.bmp

Vyman
27-09-2007, 21:38
allora mi sa che mi manca qualcos'altro oppure non ho importato bene il plug-in perchè non ho mica quel visual class :muro: :muro: :muro:

isAlreadyInUse
27-09-2007, 21:41
:cry:

Vyman
27-09-2007, 21:44
comincio a pensare che non fa per me, assurdo :mad:
Ma una volta che eclipse ha automaticamente scaricato tutto, c'è da fare qualcos'altro?
perchè se guarda tra le features mi risulta tranquillamente org.eclipse.ve e mi dice anche che è il visual editor 1.2.1

vegeta83ssj
27-09-2007, 22:13
Viste le difficoltà con Eclipse perchè non provi l'ultimo Netbeans ?
Dici che l'hai provato tempo fa, ora siamo alla 5.5.1 ed io mi ci trovo molto molto bene!
Per il mio modo di lavorare lo trovo più intuitivo di Eclipse.

Ciauz

Vyman
27-09-2007, 22:22
Viste le difficoltà con Eclipse perchè non provi l'ultimo Netbeans ?
Dici che l'hai provato tempo fa, ora siamo alla 5.5.1 ed io mi ci trovo molto molto bene!
Per il mio modo di lavorare lo trovo più intuitivo di Eclipse.

Ciauz

è proprio quella la versione che ho.
la tristezza è che fa dei layout pessimi, tutti in fila, l'ultima volta 1000 righe di codice :doh:

71104
27-09-2007, 22:30
Viste le difficoltà con Eclipse perchè non provi l'ultimo Netbeans ? ti assicuro che non è lui ad essere impedito, è proprio l'installazione di Visual Editor che ha qualcosa che non va. anche io, che uso (e amo) Eclipse molto frequentemente da circa 2 anni, ho provato più volte ad installarlo senza mai aver avuto successo. alla fine ho ripiegato su Jigloo (ottimo devo dire), il quale Jigloo mi ha però fatto rendere conto che il codice autogenerato per le GUI fa semplicemente cagare, qualunque sia il sistema di generazione :)
un computer non è un uomo; può generare codice perfetto, ma non riuscirà mai a generare codice facilmente comprensibile ad un essere umano e quindi facilmente manutenibile.

attualmente sto lavorando con Jigloo per un certo esame; tra qualche giorno quando avrò finito con questo esame (forse domani stesso :sperem: ) disinstallerò Jigloo e d'ora in poi sempre tutto a manina, e in puro Swing.

Vyman
27-09-2007, 22:34
ti assicuro che non è lui ad essere impedito, è proprio l'installazione di Visual Editor che ha qualcosa che non va. anche io, che uso (e amo) Eclipse molto frequentemente da circa 2 anni, ho provato più volte ad installarlo senza mai aver avuto successo. alla fine ho ripiegato su Jigloo (ottimo devo dire), il quale Jigloo mi ha però fatto rendere conto che il codice autogenerato per le GUI fa semplicemente cagare, qualunque sia il sistema di generazione :)
un computer non è un uomo; può generare codice perfetto, ma non riuscirà mai a generare codice facilmente comprensibile ad un essere umano e quindi facilmente manutenibile.

attualmente sto lavorando con Jigloo per un certo esame; tra qualche giorno quando avrò finito con questo esame (forse domani stesso :sperem: ) disinstallerò Jigloo e d'ora in poi sempre tutto a manina, e in puro Swing.

che se ti mostro l'immagine di come vorrei il layout mi insegni un metodo più o meno veloce?
Quel che mi blocca dal fare a mano è proprio il fatto che non ho ancora esperienza con tutti i parallel/sequential del caso :cry:

Vyman
27-09-2007, 23:09
ho cancellato tutto e ricominciato da capo per 4 volte.

alla quinta ci sono riuscitooooooooooo :read:

71104
28-09-2007, 01:26
ho cancellato tutto e ricominciato da capo per 4 volte.

alla quinta ci sono riuscitooooooooooo :read:

sei riuscito ad installare Visual Editor?? spiegami come hai fatto perché a questo punto voglio saperlo anche io :D (seriamente)

isAlreadyInUse
28-09-2007, 08:52
:eek:

PGI-Bis
28-09-2007, 09:03
Ci sei riuscito davvero? Grande. Io non ce l'ho mai fatta. :muro: E non scherzo.

isAlreadyInUse
28-09-2007, 09:12
:eek: :eek: :eek: :eek: :eek: :eek: :eek: :eek: :eek: :eek: :eek:

franksisca
28-09-2007, 09:18
ma guardate che è facilissimoinstallarlo, almeno io ho sempre fatto così (installato 3 volte e sempre al primo colpo)

prendo gef, VE e quell'altro con non ricordo, apro i rar e dentro ci sono delle cartelle che copio nella cartella di eclipse, facico sovrascrivere e il gioco e fatto.


ho fatto così anche per c++, jsp, html, uml, per tutti i plugin e sempre andato bene al primo colpo........

Vyman
28-09-2007, 09:27
sei riuscito ad installare Visual Editor?? spiegami come hai fatto perché a questo punto voglio saperlo anche io :D (seriamente)

ho seguito le istruzioni del link che mi aveva dato PGI-Bis, usando però eclipse versione 3.3

isAlreadyInUse
28-09-2007, 09:28
"BRAVA" franksisca

franksisca
28-09-2007, 09:38
"BRAVA" franksisca

allora, a parte il brava che è ironico.......ma ho detto qualcosa che non và???

isAlreadyInUse
28-09-2007, 09:40
No affatto :)

Vyman
28-09-2007, 09:50
la cosa un poco triste è questa.
il lavoro che dovevo fare:

click (http://img516.imageshack.us/img516/643/lavoroov0.jpg)

e questo il codice generato:

public static void setHorizontalLayout(GroupLayout layout,JPanel setter,JLabel number_setter,JLabel name_setter,JLabel[] label,
JLabel[] sub_label,JLabel[][][][] receive_value,JLabel[][][][] receive_perc,
JLabel[][][][] defense_value,JLabel[][][][] defense_perc,int s)
{
setter.setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(number_setter,GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addComponent(label[0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(label[1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label[2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label[3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label[4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label[5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label[6],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(sub_label[0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][0][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][0][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][0][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][0][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][0][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][0][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][0][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][0][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][0][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][0][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(sub_label[5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[6],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][0][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][0][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][1][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED,GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)
.addComponent(receive_perc[s][0][1][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[7],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][1][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][1][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[8],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][1][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][1][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[9],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][1][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][1][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[10],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][1][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][1][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(sub_label[11],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[12],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][1][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][1][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][2][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][2][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[13],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][2][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][2][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[14],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][2][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][2][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[15],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][2][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][2][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[16],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][2][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][2][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(sub_label[17],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[18],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][2][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][2][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][3][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][3][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[19],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][3][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][3][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[20],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][3][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][3][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[21],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][3][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][3][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[22],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][3][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][3][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(sub_label[23],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[24],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[25],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[26],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[27],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[28],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[29],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[30],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[31],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[32],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[33],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[34],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[35],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][0][3][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][3][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][4][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][4][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][4][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][4][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][4][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][4][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][4][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][4][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][4][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][4][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][4][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][4][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][5][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][5][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][5][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][5][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][5][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][5][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][5][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][5][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][5][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][5][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][0][5][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][0][5][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
)
.addComponent(name_setter,GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(label[7],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(label[8],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label[9],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label[10],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addComponent(sub_label[36],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[37],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[38],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[39],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[40],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[41],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[42],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[43],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[44],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[45],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[46],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[47],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[48],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[49],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[50],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[51],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[52],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[53],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][0][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][0][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][0][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][0][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][0][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][0][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][0][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][0][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][0][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][0][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][0][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][0][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][1][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][1][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][1][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][1][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][1][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][1][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][1][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][1][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][1][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][1][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][1][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][1][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][2][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][2][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][2][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][2][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][2][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][2][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][2][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][2][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][2][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][2][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][2][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][2][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
)
.addGroup(layout.createSequentialGroup()
.addComponent(label[14],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(label[15],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label[16],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addComponent(sub_label[72],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[73],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[74],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[75],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[76],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[77],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[78],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[79],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[80],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[81],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[82],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[83],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addComponent(defense_value[s][0][0][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][0][0][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][0][0][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][0][0][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][0][0][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][0][0][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][0][0][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][0][0][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][0][0][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][0][0][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][0][0][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][0][0][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][0][1][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][0][1][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][0][1][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][0][1][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][0][1][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][0][1][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][0][1][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][0][1][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][0][1][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][0][1][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][0][1][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][0][1][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED,442,Short.MAX_VALUE)
.addComponent(label[17],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(label[18],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label[19],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addComponent(label[11],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label[12],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(label[13],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[54],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][3][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][3][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[55],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][3][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][3][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[56],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][3][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][3][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[57],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][3][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][3][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(sub_label[58],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][3][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][3][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(sub_label[59],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[60],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][3][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][3][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][4][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][4][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][4][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][4][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[61],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][4][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][4][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[62],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][4][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][4][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[63],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][4][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][4][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[64],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(sub_label[65],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[66],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][4][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][4][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_value[s][1][5][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][5][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][5][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][5][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[67],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][5][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][5][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[68],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][5][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][5][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[69],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][5][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][5][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[70],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(receive_value[s][1][5][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(receive_perc[s][1][5][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[71],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addGroup(GroupLayout.Alignment.LEADING,layout.createSequentialGroup()
.addComponent(defense_value[s][1][0][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][1][0][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][1][0][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][1][0][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(GroupLayout.Alignment.LEADING,layout.createSequentialGroup()
.addComponent(sub_label[84],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[85],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(defense_value[s][1][0][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][1][0][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[86],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(defense_value[s][1][0][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][1][0][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[87],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(defense_value[s][1][0][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][1][0][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[88],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(sub_label[89],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sub_label[90],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addGroup(layout.createSequentialGroup()
.addComponent(defense_value[s][1][0][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][1][0][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_value[s][1][1][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][1][1][0],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(defense_value[s][1][1][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][1][1][1],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[91],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(defense_value[s][1][1][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][1][1][2],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[92],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(defense_value[s][1][1][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][1][1][3],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[93],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(defense_value[s][1][1][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][1][1][4],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[94],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(defense_value[s][1][1][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(defense_perc[s][1][1][5],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
.addComponent(sub_label[95],GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE,GroupLayout.PREFERRED_SIZE)
)
)
)
)
)
.addContainerGap(GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)
)
);
} //setHorizontalLayout

ed è solo l'horizontal... e gli array li ho dovuti mettere io, che gli IDE ti fan usare un oggetto solo per volta :cry:

PGI-Bis
28-09-2007, 09:58
Chi ha progettato quell'interfaccia dovrebbe essere premiato con cinquanta frustate sotto i piedi.

franksisca
28-09-2007, 09:59
scusa se mi permetto, ma non è che l'hai pensata male proprio l'applicazione????


tutte quelle zone non sono 2raggruppabili", tramite dei "schede" come firefox???

così, oltre ad essere difficile da leggere il codice, e difficile anche il programma......IMHO

Vyman
28-09-2007, 10:01
scusate non ho capito...
è il codice che non va o proprio il layout?

e perchè?

franksisca
28-09-2007, 10:11
Chi ha progettato quell'interfaccia dovrebbe essere premiato con cinquanta frustate sotto i piedi.

scusa se mi permetto, ma non è che l'hai pensata male proprio l'applicazione????


tutte quelle zone non sono 2raggruppabili", tramite dei "schede" come firefox???

così, oltre ad essere difficile da leggere il codice, e difficile anche il programma......IMHO
:eek: :eek: :eek: :eek: :eek: la penso come PGI.....mi devo preoccupare:fagiano: :fagiano: :fagiano:
scusate non ho capito...
è il codice che non va o proprio il layout?

e perchè?


allora, il codice è il classico codice generato da un qualsiasi obbrobbrio grafico, che dovrebbero aiutare, ma vai a metterci le mai e non ne esci più (Jbulder è maestro in questo caso).

il layout, secondo me è progettato(se è stato progettato) male......magari se ci dici più o meno cosa devi fare possiamo darti qualceh suggerimento ;)

Vyman
28-09-2007, 10:16
:eek: :eek: :eek: :eek: :eek: la penso come PGI.....mi devo preoccupare:fagiano: :fagiano: :fagiano:



allora, il codice è il classico codice generato da un qualsiasi obbrobbrio grafico, che dovrebbero aiutare, ma vai a metterci le mai e non ne esci più (Jbulder è maestro in questo caso).

il layout, secondo me è progettato(se è stato progettato) male......magari se ci dici più o meno cosa devi fare possiamo darti qualceh suggerimento ;)

il codice fa schifo e lo so, ora come l'altra volta a mano devo metterci qualche for qua e la dove possibile...

Per il layout:
allora, son due atleti (uno sopra e uno sotto quello sotto è "spostato" per far vedere che le zone son 6). praticamente devo poter vedere velocemente (e per questo ho bocciato l'opzione di fare dei tab) il numero (dove ci son tutti gli zeri) e la percentuale (dove ci son tutti i trattini) di scelta di un atleta.

detto facile: uno parte da zona 1, e palleggia in zona 4. sulla cella prevista ci sarà un 1, a fianco 100%, sulle altre di zona 1 ci sarà 0%. e così via.
ci son quattro divisioni (ovvero RB RM DB DM) in base al tipo di pallone

Purtroppo è una cosa che dovevo fare in 2 giorni (e già so in ritardo di uno, grazie builder vari) e non mi son venute altre idee sulla disposizione...

PGI-Bis
28-09-2007, 10:26
Se sei alle strette non hai altra scelta che presentare quella cosa. Il problema è nell'organizzazione delle informazioni proposte dalla GUI. Le soluzioni sono fornite dalla psicologia cognitiva (percezione di pattern, teoria dei raggruppamenti, teoria dei modello mentali eccetera).

Vyman
28-09-2007, 10:29
Se sei alle strette non hai altra scelta che presentare quella cosa. Il problema è nell'organizzazione delle informazioni proposte dalla GUI. Le soluzioni sono fornite dalla psicologia cognitiva (percezione di pattern, teoria dei raggruppamenti, teoria dei modello mentali eccetera).

qualche parola semplice per uno che si è diplomato 3 mesi fa c'è? :cry:
Tanto alle strette non sono, volendo faccio anche in tempo a cambiare... l'importante è che poi il risultato sia qualcosa tipo quel che ho descritto prima.

Vyman
28-09-2007, 10:31
a questo punti mi sa che è pessimo anche quest'altro lavoro che ho fatto con più calma:

click (http://img515.imageshack.us/img515/9686/lavoro2wr4.jpg)

Stessa situazione, due squadre una a destra una a sinistra. 4 tipologie (battuta, ricezione ect ect) e tanti bei (o brutti) numerini messi la.

Tra l'altro ora mi si presenta anche il problema che dovrei stampare quei dati.

Siccome dubito ci sia un modo per mandare in stampa un JPanel intero, la prima cosa che mi era venuta in mente è mettere tutto su un file .txt temporaneo e mandarlo in stampa.
Ma tramite java si può?

franksisca
28-09-2007, 10:42
ma tutti sti pallavolisti/scout non li sapevo nel forum:D :D :D :D

ho fatto una cosa simile con un amico in excel, ma ora lui è in spagna per l'erasmus, e quindi non ho il file, altrimenti, anche se non andava bene, te l'avrei mandato:D


bene o male ho vapito quello che dei fare, e dato il poco tempo, come prima build credo che quella vada bene.


io la penserei così:

fare 2 jframe che rappresentano gnuno un giocatore, così li puoi visualizzare contemporaneamente

in goni JFrame metti solo delle jlabel con nomeZona, nomedato(ricezione, muro, salvataggio, quello che ti serve) (puoi fare uno schema come ha fatto Vyman, e dentro ci metti le jlabel con i pulsantini + e -); tutti quei pulsnati sono inutili e antiestetici, sempre IMHO ;)


inoltre, così facendo, puoi rivalutare i tab(non mi veniva priam :D) e metterne in gnnio Jframe 1 per ogni giocatore di quella squadra ;)

franksisca
28-09-2007, 10:42
leggo nel nome del programma SETTER ANALAYZER....ma che fai giocare i settter a pallavolo:mbe: :mbe: :mbe: :mbe: :mbe:

franksisca
28-09-2007, 10:43
Se sei alle strette non hai altra scelta che presentare quella cosa. Il problema è nell'organizzazione delle informazioni proposte dalla GUI. Le soluzioni sono fornite dalla psicologia cognitiva (percezione di pattern, teoria dei raggruppamenti, teoria dei modello mentali eccetera).

:sofico: :sofico: :sofico: :sofico: :sofico: :sofico:

Vyman
28-09-2007, 10:45
ma tutti sti pallavolisti/scout non li sapevo nel forum:D :D :D :D

ho fatto una cosa simile con un amico in excel, ma ora lui è in spagna per l'erasmus, e quindi non ho il file, altrimenti, anche se non andava bene, te l'avrei mandato:D


bene o male ho vapito quello che dei fare, e dato il poco tempo, come prima build credo che quella vada bene.


io la penserei così:

fare 2 jframe che rappresentano gnuno un giocatore, così li puoi visualizzare contemporaneamente

in goni JFrame metti solo delle jlabel con nomeZona, nomedato(ricezione, muro, salvataggio, quello che ti serve) (puoi fare uno schema come ha fatto Vyman, e dentro ci metti le jlabel con i pulsantini + e -); tutti quei pulsnati sono inutili e antiestetici, sempre IMHO ;)


inoltre, così facendo, puoi rivalutare i tab(non mi veniva priam :D) e metterne in gnnio Jframe 1 per ogni giocatore di quella squadra ;)

sai che mi sfugge di che pulsanti stai parlando?
quelli son tutti label con il bevelborder, per l'immissione dati uso altro (JDialog che si aprono all'occorrenza con F3,F4,F5 ect).
Vyman son sempre io (entrambi i prog son miei infatti :D ) e a questo punto mi sfugge cosa devo cambiare, sarà l'ora che si avvicina al pranzo, boh.

Vyman
28-09-2007, 10:46
leggo nel nome del programma SETTER ANALAYZER....ma che fai giocare i settter a pallavolo:mbe: :mbe: :mbe: :mbe: :mbe:

setter sta per palleggiatore :D (almeno così sono descritti nei documenti ufficiali europei)

franksisca
28-09-2007, 10:51
sai che mi sfugge di che pulsanti stai parlando?
quelli son tutti label con il bevelborder, per l'immissione dati uso altro (JDialog che si aprono all'occorrenza con F3,F4,F5 ect).
Vyman son sempre io (entrambi i prog son miei infatti :D ) e a questo punto mi sfugge cosa devo cambiare, sarà l'ora che si avvicina al pranzo, boh.

:D :D :D ok, sono rinco:D:D:D:D:D
smbravano pulsanti, ma oramai sapete che sono rinco, quindi non meravigliatevi.


intendevo di mettere 2 JFRAME Separati(o sono già 2 jframe?????) ognuno con i suoi giocatori, in modo che puoi gestire meglio, IMHO, la situazione, mettendo una squadra a sx e una a dx.

poi copi il campo che hai fatto (tu) e lo metti pieno di label(naturalmente solo quelle che ti servono), magari il campo lo fai più grande.........

Vyman
28-09-2007, 10:53
:D :D :D ok, sono rinco:D:D:D:D:D
smbravano pulsanti, ma oramai sapete che sono rinco, quindi non meravigliatevi.


intendevo di mettere 2 JFRAME Separati(o sono già 2 jframe?????) ognuno con i suoi giocatori, in modo che puoi gestire meglio, IMHO, la situazione, mettendo una squadra a sx e una a dx.

poi copi il campo che hai fatto (tu) e lo metti pieno di label(naturalmente solo quelle che ti servono), magari il campo lo fai più grande.........

ah ok capito tutto... effettivamente sì potrei...
e per il discorso della stampa? sai mica qualcosa?

PGI-Bis
28-09-2007, 11:03
Non è cosa che si spieghi in due giorni.

A grandi linee, il problema è che la tua interfaccia presenta un numero di informazioni sufficientemente elevato da richiedere un altrettanto elevato grado di addestramento da parte dell'utente affinchè egli possa coglierle in tempi ragionevoli.

La teoria dei raggruppamenti dice che di fronte ad un numero di informazioni troppo grande per poter essere gestito a livello cosciente il cervello umano crea dei gruppi distruttivi. Es.: prende cento pulsanti e li divide in dieci gruppi. I gruppi sono distruttivi perchè la quantità di informazioni suggerita dal gruppo è minore delle informazioni ricavabili dall'esame delle singole unità raggruppate. Insomma, il gruppo è più facile da gestire ma significa meno.

Il raggruppamento è fondato sulla percezione di caratteristiche comuni. I caratteri "accomunanti" possono essere reali, cioè effettivamente presenti nelle singole unità, o immaginari, cioè generati ad hoc al fine di consentire il raggruppamento.

Più o meno consapevolmente tu hai applicato un pattern visivo per facilitare la creazione di gruppi nell'osservatore. La domanda è: quali informazioni conserva il gruppo così suggerito? Detto altrimenti, osservando il gruppo cosa è possibile dire di ciò che vi è contenuto? Un bel nulla: è un gruppo spaziale puro, la caratteristica comune a ciò che contiene è il fatto di essere contenuto in una certa area.

La seconda GUI soffre dello stesso problema ma possiede anche un tanto di virtù. Il rettangolo arancione, che spero rappresenti il campo di gioco, è un suggeritore di contesto cioè un segnale (in questo caso visivo) che agevola la formazione di un modello mentale. I modelli mentali sono rappresentazioni astratte di una situazione reale e sono usati dal cervello per prendere delle decisioni. Anche qui la domanda è: come sfrutti questo fatto? A che pro hai fornito all'utente quel suggeritore? Hai considerato la possibilità di renderlo interattivo?

Ecco, sono questioni di questo genere quelle che guidano la creazione di una GUI. La tua capacità di programmatore è quella che poi ti consente di rendere effettive le soluzioni che hai trovato.

franksisca
28-09-2007, 11:06
ah ok capito tutto... effettivamente sì potrei...
e per il discorso della stampa? sai mica qualcosa?

ripetimi il discorso stampa che mi è sfuggito sino ad ora:D

Vyman
28-09-2007, 11:15
Non è cosa che si spieghi in due giorni.

A grandi linee, il problema è che la tua interfaccia presenta un numero di informazioni sufficientemente elevato da richiedere un altrettanto elevato grado di addestramento da parte dell'utente affinchè egli possa coglierle in tempi ragionevoli.

La teoria dei raggruppamenti dice che di fronte ad un numero di informazioni troppo grande per poter essere gestito a livello cosciente il cervello umano crea dei gruppi distruttivi. Es.: prende cento pulsanti e li divide in dieci gruppi. I gruppi sono distruttivi perchè la quantità di informazioni suggerita dal gruppo è minore delle informazioni ricavabili dall'esame delle singole unità raggruppate. Insomma, il gruppo è più facile da gestire ma significa meno.

Il raggruppamento è fondato sulla percezione di caratteristiche comuni. I caratteri "accomunanti" possono essere reali, cioè effettivamente presenti nelle singole unità, o immaginari, cioè generati ad hoc al fine di consentire il raggruppamento.

Più o meno consapevolmente tu hai applicato un pattern visivo per facilitare la creazione di gruppi nell'osservatore. La domanda è: quali informazioni conserva il gruppo così suggerito? Detto altrimenti, osservando il gruppo cosa è possibile dire di ciò che vi è contenuto? Un bel nulla: è un gruppo spaziale puro, la caratteristica comune a ciò che contiene è il fatto di essere contenuto in una certa area.

La seconda GUI soffre dello stesso problema ma possiede anche un tanto di virtù. Il rettangolo arancione, che spero rappresenti il campo di gioco, è un suggeritore di contesto cioè un segnale (in questo caso visivo) che agevola la formazione di un modello mentale. I modelli mentali sono rappresentazioni astratte di una situazione reale e sono usati dal cervello per prendere delle decisioni. Anche qui la domanda è: come sfrutti questo fatto? A che pro hai fornito all'utente quel suggeritore? Hai considerato la possibilità di renderlo interattivo?

Ecco, sono questioni di questo genere quelle che guidano la creazione di una GUI. La tua capacità di programmatore è quella che poi ti consente di rendere effettive le soluzioni che hai trovato.

Credo di aver afferrato un paio di concetti (tutti mi sa di no :D )
Allora, diciamo che al momento, l'utente son sempre io (evviva le cose fatte in casa), quindi so per certo tutto quel che va fatto e tutto quel che significa ogni singolo gruppo. Comunque ci avevo già aggiunto un README con istruzioni varie su ogni singolo componente, magari non è sufficiente, ma all'inizio spero che basti.
Il campo di gioco l'avevo pensato per due motivi:
1) si può vedere la posizione in campo dei giocatori (si aggiorna automaticamente quando le formazioni girano in campo)
2) può aiutare a prevenire errori di formazione (appunto per il fatto che gira da solo, e quindi è sempre corretto)
Per tutto il resto mi sa che è ora di prendersi un paio di libri ed imparare da solo, soprattutto per poter migliorare...

Vyman
28-09-2007, 11:17
ripetimi il discorso stampa che mi è sfuggito sino ad ora:D

Tra l'altro ora mi si presenta anche il problema che dovrei stampare quei dati.

Siccome dubito ci sia un modo per mandare in stampa un JPanel intero, la prima cosa che mi era venuta in mente è mettere tutto su un file .txt temporaneo e mandarlo in stampa.
Ma tramite java si può?

Praticamente c'è una classe/metodo/altro che si interfaccia al sistema operativo per far partire la finestrella di stampa?
Poi se stampare il JPanel (che non credo si possa) o un .txt (mi sa più probabile) si vedrà.

franksisca
28-09-2007, 11:41
Tra l'altro ora mi si presenta anche il problema che dovrei stampare quei dati.

Siccome dubito ci sia un modo per mandare in stampa un JPanel intero, la prima cosa che mi era venuta in mente è mettere tutto su un file .txt temporaneo e mandarlo in stampa.
Ma tramite java si può?

Praticamente c'è una classe/metodo/altro che si interfaccia al sistema operativo per far partire la finestrella di stampa?
Poi se stampare il JPanel (che non credo si possa) o un .txt (mi sa più probabile) si vedrà.

di fare si può fare sicuro, puoi anche creare un pdf e mandarlo in stampa........pgi ti saprà dre di più, avevo un esempio (che tra l'altro mi serve pure a me) ma ora l'ho perso.......se lo ritrovo ti faccio sapree

PGI-Bis
28-09-2007, 12:26
Teoricamente la stampa di file è questione di poche righe:

import java.awt.print.*;
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import java.io.*;

public class Main {
public static void main(String[] args) throws Throwable {
DocFlavor flavor = DocFlavor.INPUT_STREAM.TEXT_PLAIN_HOST;
PrintRequestAttributeSet set = new HashPrintRequestAttributeSet();
set.add(MediaSizeName.ISO_A4);
PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, set);
if(services.length > 0) {
PrintService service = services[0];
FileInputStream in = new FileInputStream("document.txt");
Doc doc = new SimpleDoc(in, flavor, null);
service.createPrintJob().print(doc, set);
} else {
System.out.println("e te pareva");
}
}
}

Dico in teoria perchè sinceramente non ho mai avuto l'occasione di usare questo sistema: quando stampo uso PrinterJob e Printable.

franksisca
28-09-2007, 12:28
l'else è proprio professionale:O :O :O :O

PGI-Bis
28-09-2007, 12:31
Eh, ci vogliono anni e anni di esperienza per arrivare a quel punto :D

Vyman
28-09-2007, 12:47
Teoricamente la stampa di file è questione di poche righe:

import java.awt.print.*;
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import java.io.*;

public class Main {
public static void main(String[] args) throws Throwable {
DocFlavor flavor = DocFlavor.INPUT_STREAM.TEXT_PLAIN_HOST;
PrintRequestAttributeSet set = new HashPrintRequestAttributeSet();
set.add(MediaSizeName.ISO_A4);
PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, set);
if(services.length > 0) {
PrintService service = services[0];
FileInputStream in = new FileInputStream("document.txt");
Doc doc = new SimpleDoc(in, flavor, null);
service.createPrintJob().print(doc, set);
} else {
System.out.println("e te pareva");
}
}
}

Dico in teoria perchè sinceramente non ho mai avuto l'occasione di usare questo sistema: quando stampo uso PrinterJob e Printable.

Questo per stampare un txt giusto?
Quindi come immaginavo niente possibilità di interagire con il panel, e creazione di un file da stampare.
Ok... PrinterJob e Printable cosa sono per curiosità?

Altra curiosità, se io al momento non ho una stampante collegata, si riesce a capire comunque se la cosa funziona? :D

Vyman
28-09-2007, 13:05
che bello, a me esce "e te pareva" :cry:
è perchè appunto non ho la stampante attiva? :O

PGI-Bis
28-09-2007, 14:56
Prova ad installare una stampante virtuale tipo PDFCreator. Comunque lì tutto dipende da cosa è in grado di masticare la stampante.

PrinterJob e Printable servono per la stampa "grafica": tu disegni e la stampante riproduce il disegno.

Il disegno deve essere "scritto" nel metodo print di un oggetto Printable. Printable è un'interfaccia che devi concretizzare in una tua classe. Il metodo print in questione ha tre parametri, uno è l'indice della pagina che la stampante sta richiedendo, uno è il formato della pagina e uno e il contesto grafico della stampa.

L'indice lo usi se devi stampare su più fogli. Il formato di pagina ti serve per determinare l'area di stampa. Il Graphics (che è un Graphics2D a partire da Java 1.2) è l'appiglio tramite cui concretamente disegni.

E' più facile a farsi che a dirsi, se vuoi più tardi di scrivo un esempio.

Vyman
28-09-2007, 15:05
Prova ad installare una stampante virtuale tipo PDFCreator. Comunque lì tutto dipende da cosa è in grado di masticare la stampante.

PrinterJob e Printable servono per la stampa "grafica": tu disegni e la stampante riproduce il disegno.

Il disegno deve essere "scritto" nel metodo print di un oggetto Printable. Printable è un'interfaccia che devi concretizzare in una tua classe. Il metodo print in questione ha tre parametri, uno è l'indice della pagina che la stampante sta richiedendo, uno è il formato della pagina e uno e il contesto grafico della stampa.

L'indice lo usi se devi stampare su più fogli. Il formato di pagina ti serve per determinare l'area di stampa. Il Graphics (che è un Graphics2D a partire da Java 1.2) è l'appiglio tramite cui concretamente disegni.

E' più facile a farsi che a dirsi, se vuoi più tardi di scrivo un esempio.

Allora, ho provato ad usare il codice di prima su un pc con stampante collegata, e continua a darmi il "e te pareva" (quindi skippa l'if, il perchè non so).

Io dovrei stampare il pannello coi dati (quindi nome giocatori, e valutazioni sotto battuta, attacco ect), il link all'immagine è sopra, se vuoi la rimetto.

Semplificando direi che ci sono 3 casi:

1) usare il primo codice che mi hai dato (che però non va)
2) provare a capire il discorso di PrinterJob e Printable
3) usare la sempre bella frase: "eh mi spiace ma non si può stampare" :D

PGI-Bis
28-09-2007, 17:11
Il codice va. E' la stampante che non supporta quel formato. Puoi provare a trastullarti cercando di capire cosa sia possibile stampare. Io consiglio il Printable. Questo stampa del testo senza tener conto delle tabulazioni. Le tabulazioni lo rendono un po' più complicato ma se vuoi ti faccio vedere anche quello.

In pratica prendi il testo e lo stampi una linea per volta. Ogni linea ha una sua altezza. Se stampando la linea corrente finisci fuori dalla pagina devi cambiare pagina. Io di solito preferisco calcolare le pagine prima di stamparle ma si può fare anche "al volo".

package printsample;

import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.print.*;
import java.text.*;
import java.util.*;

public class TextPrinter implements Printable {
private ArrayList<Page> pagine;
private boolean pagineCreate;
private String text;

public TextPrinter(String textToPrint) {
this.text = textToPrint;
}

@Override public int print(Graphics graphics, PageFormat pageFormat, int pageToPrint) {
if(!pagineCreate) {
creaPagine(graphics, pageFormat);
}
if(pageToPrint < pagine.size()) {
Page pagina = pagine.get(pageToPrint);
graphics.setColor(Color.BLACK);
pagina.print(graphics, pageFormat);
return PAGE_EXISTS; //RESTANO DELLE PAGINE DA STAMPARE
} else {
return NO_SUCH_PAGE; //FINITO
}
}

private void creaPagine(Graphics graphics, PageFormat pageFormat) {
Collection<String> lineOfText = getLines();
pagine = new ArrayList<Page>();
float pageWidth = (float)pageFormat.getImageableWidth();
float pageHeight = (float)pageFormat.getImageableHeight();
float currentHeight = 0;
Page currentPage = new Page();
pagine.add(currentPage);
for(String text : lineOfText) {
AttributedString attString = new AttributedString(text);
attString.addAttribute(TextAttribute.FONT, new Font("Serif",
Font.PLAIN, 12));
AttributedCharacterIterator attIterator = attString.getIterator();
Graphics2D g = (Graphics2D)graphics;
FontRenderContext fcr = g.getFontRenderContext();
LineBreakMeasurer measurer = new LineBreakMeasurer(attIterator,fcr);
while(measurer.getPosition() < attIterator.getEndIndex()) {
TextLayout layout = measurer.nextLayout(pageWidth);
float lineHeight = layout.getAscent() + layout.getDescent() +
layout.getLeading();
currentHeight += lineHeight;
if(currentHeight > pageHeight) {
currentPage = new Page();
pagine.add(currentPage);
currentHeight = lineHeight;
}
currentPage.add(layout);
}
}
pagineCreate = true;
}

private Collection<String> getLines() {
ArrayList<String> lines = new ArrayList<String>();
Scanner lineBreaker = new Scanner(text);
while(lineBreaker.hasNextLine()) {
String line = lineBreaker.nextLine();
if(line.length() == 0) {
line = " ";
}
lines.add(line);
}
return lines;
}
}

class Page {
private ArrayList<TextLayout> lines = new ArrayList<TextLayout>();

public void add(TextLayout layout) {
System.out.println("add " + layout);
lines.add(layout);
}

public void print(Graphics graphics, PageFormat format) {
double dx = format.getImageableX();
double dy = format.getImageableY();
Graphics2D g = (Graphics2D)graphics;
g.translate(dx, dy);
float x = 0;
float y = 0;
for(TextLayout layout : lines) {
y += layout.getAscent();
layout.draw(g, x, y);
y += layout.getDescent() + layout.getLeading();
}
g.translate(-dx, -dy);
}
}

Quella roba lì disegna le pagine sulla stampante. Per stampare usi PrinterJob. Ad esempio (e solo ad esempio):

package printsample;

import java.awt.print.*;
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;

public class Main {
/* Richiede un argomento: il file che contiene il testo da stampare */
public static void main(String[] args) throws Throwable {
FileChannel in = new FileInputStream(args[0]).getChannel();
ByteBuffer data = ByteBuffer.allocate((int)in.size());
while(data.hasRemaining()) {
in.read(data);
}
in.close();
data.rewind();
String text = Charset.defaultCharset().decode(data).toString();
TextPrinter printer = new TextPrinter(text);
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(printer);
if(pj.printDialog()) {
pj.print();
}
}
}

Così come stampi del testo puoi anche stampare strutture più articolate. Di solito io stampo tabelle. E' una cavolata: si tratta di disegnare dei rettangoli con del testo in mezzo, nulla più.

Vyman
28-09-2007, 17:29
ecco la! tabelle!!
se io avessi una serie di label che si possono mettere a mo di tabella, si riuscirebbe a stampare i contenuti?

PGI-Bis
28-09-2007, 18:09
Puoi stampare un pannello così come appare in una finestra ma non è detto che il pannello stia nella pagina.

Per provare, basta invocare il metodo print(Graphics) del componente che vuoi stampare. Il Graphics che passi al metodo print può essere quello che un Printable riceve nel suo metodo print ma, per questioni di concorrenza, sarebbe preferibile usare il Graphics ricavato da un'immagine (BufferedImage e createGraphics()).

Vyman
28-09-2007, 18:17
Puoi stampare un pannello così come appare in una finestra ma non è detto che il pannello stia nella pagina.

Per provare, basta invocare il metodo print(Graphics) del componente che vuoi stampare. Il Graphics che passi al metodo print può essere quello che un Printable riceve nel suo metodo print ma, per questioni di concorrenza, sarebbe preferibile usare il Graphics ricavato da un'immagine (BufferedImage e createGraphics()).

infatti... per evitare il rischio che non stia nella pagina pensavo ad una cosa così:

riga 1 --> name_team (che sta sempre bene)
riga 2 --> name_player[0], value_var[0][i] (i da 0 a non ricordo al momento)
riga 3 --> name_player[1], value_var[1][i] (i da 0 a non ricordo al momento)
...
riga n+1 --> name_player[n], value_var[n][i] (i da 0 a non ricordo al momento)

si può fare? come?

PGI-Bis
28-09-2007, 18:35
Per evitare il rischio che non stia nella pagina devi adattare il contenuto alla pagina. A spanne uno fa finta di programmare.

Così come prima è stato calcolato il numero di pagine in base al numero ed alla dimensione di stampa delle linee di testo, così calcolerai il numero di pagine e la posizione di ciò che devi stampare.

Creare una tabella è relativamente semplice. Noto il numero di colonne, calcoli l'altezza di una riga basandoti sul contenuto di ogni cella che vi appartenga: l'altezza della riga è pari alla massima altezza delle celle di quella riga. Fine della tabella: righe successive si collocano una dopo l'altra lungo l'asse verticale. Cambi pagina quando l'altezza complessiva delle righe supera quella dell'area disegnabile nella pagina.

Vyman
28-09-2007, 18:38
Per evitare il rischio che non stia nella pagina devi adattare il contenuto alla pagina. A spanne uno fa finta di programmare.

Così come prima è stato calcolato il numero di pagine in base al numero ed alla dimensione di stampa delle linee di testo, così calcolerai il numero di pagine e la posizione di ciò che devi stampare.

Creare una tabella è relativamente semplice. Noto il numero di colonne, calcoli l'altezza di una riga basandoti sul contenuto di ogni cella che vi appartenga: l'altezza della riga è pari alla massima altezza delle celle di quella riga. Fine della tabella: righe successive si collocano una dopo l'altra lungo l'asse verticale. Cambi pagina quando l'altezza complessiva delle righe supera quella dell'area disegnabile nella pagina.

capito...

per fare l'esempio che ho fatto sopra (che alla fine son pure stringhe semplici) quale parte dei codici che hai messo sopra devo usare?

PGI-Bis
28-09-2007, 18:57
Ti serve il meccanismo per calcolare lo spazio verticale necessario per disegnare un blocco di testo. Per farlo si usa LineBreakIterator.

LineBreakIterator richiede un testo da analizzare. Il testo è fornito come AttributedCharacterIterator.

Per ottenere un AttributedCharacterIterator partendo da una stringa di testo semplice usi AttributedString.

Detto altrimenti, supponendo di avere la stringa S da disegnare in una colonna di larghezza L, ottieni lo spazio verticale necessario per disegnare quella stringa così:

1) Crei l'AttributedCharacterIterator:

AttributedString testo = new AttributedString(S);
testo.addAttribute(TextAttributed.FONT, il font che vuoi usare);
AttributedCharacterIterator iterator = testo.getIterator();

2) Ricavi da un Graphics2D (quello della stampa) le informazioni di riproduzione dei caratteri:

FontRenderContext fcr = graphics.getFontRenderContext();

3) Crei un LineBreakMeasurer:

LineBreakMeasurer measurer = new LineBreakMeasurer(iterator, fcr);

4) Ti fai dire da measurer quante linee occorrono per disegnare quel testo dato un certo spazio orizzontale (quello della colonna), sommi l'altezza di queste linee (che ti vengono restituite come oggetti TextLayout) e hai l'altezza "ideale" della cella:

float maxHeight = 0;
while(measurer.getPosition() < iterator.end()) {
TextLayout line = measurer.nextLayout(L); //L = larghezza colonna
maxHeight += line.getAscent() + line.getDescent() + line.getLeading();
}

Fai questo passaggio per ogni cella della riga e usi il massimo "maxHeight" computato come altezza della riga. Poi passi alla riga successiva e così via.

Alla fine avrai la larghezza delle singole colonne e l'altezza di ogni riga vale a dire la griglia della tabella. Dopo aver computato la struttura della tabella altro non fai che disegnare il testo all'interno delle celle.

Vyman
28-09-2007, 19:05
Ti serve il meccanismo per calcolare lo spazio verticale necessario per disegnare un blocco di testo. Per farlo si usa LineBreakIterator.

LineBreakIterator richiede un testo da analizzare. Il testo è fornito come AttributedCharacterIterator.

Per ottenere un AttributedCharacterIterator partendo da una stringa di testo semplice usi AttributedString.

Detto altrimenti, supponendo di avere la stringa S da disegnare in una colonna di larghezza L, ottieni lo spazio verticale necessario per disegnare quella stringa così:

1) Crei l'AttributedCharacterIterator:

AttributedString testo = new AttributedString(S);
testo.addAttribute(TextAttributed.FONT, il font che vuoi usare);
AttributedCharacterIterator iterator = testo.getIterator();

2) Ricavi da un Graphics2D (quello della stampa) le informazioni di riproduzione dei caratteri:

FontRenderContext fcr = graphics.getFontRenderContext();

3) Crei un LineBreakMeasurer:

LineBreakMeasurer measurer = new LineBreakMeasurer(iterator, fcr);

4) Ti fai dire da measurer quante linee occorrono per disegnare quel testo dato un certo spazio orizzontale (quello della colonna), sommi l'altezza di queste linee (che ti vengono restituite come oggetti TextLayout) e hai l'altezza "ideale" della cella:

float maxHeight = 0;
while(measurer.getPosition() < iterator.end()) {
TextLayout line = measurer.nextLayout(L); //L = larghezza colonna
maxHeight += line.getAscent() + line.getDescent() + line.getLeading();
}

Fai questo passaggio per ogni cella della riga e usi il massimo "maxHeight" computato come altezza della riga. Poi passi alla riga successiva e così via.

Alla fine avrai la larghezza delle singole colonne e l'altezza di ogni riga vale a dire la griglia della tabella. Dopo aver computato la struttura della tabella altro non fai che disegnare il testo all'interno delle celle.

Temo di essermi perso per strada cercando di capire il discorso degli spazi della pagina.

Supponendo che un risultato finale sarà una cosa tipo:

Nome Squadra
Cognome Nome 0 0 0 0 100% 0 0 0 0 0 0 100% 0 0 0 0 100% 0 0 0 0 100%

e via così per un totale di 12 "cognome nome ect", è necessario calcolare tutte quelle robe?

PGI-Bis
28-09-2007, 19:24
Sembra parecchia roba ma hai l'opportunità di usare un linguaggio orientato agli oggetti, ergo puoi scatenare le tue più turpi fantasie.

Un esercizio divertente è: scrivi quello che vuoi fare e dopo scrivi come farlo. Ad esempio, voglio che la stampa sia fatta così:

Tabella t = new Tabella();
t.aggiungiGiocatori(unaCollezioneDiGiocatori);
t.stampa();

Qui "unaCollezioneDiGiocatori" sarebbe un Collection<Giocatore> dove "Giocatore" è un oggetto che io immagino sia fatto così:

Giocatore g = new Giocatore();
g.setNome(unNome);
g.setCognome(unCognome);
g.setSquadra(unaSquadra);
g.setPercentualeChenneso(20);
g.setPercentualeBoh(30);
eccetera...

Cioè una collezione di informazioni su un tizio che gioca a pallavolo e... be', francamente non so un cavolo di pallavolo ma immagino che tu abbia una cognizione del dominio del tuo problema.

Una volta che hai scritto "quello che ti piace", fai in modo di farlo accadere.

Insomma, fantasia, creatività, iniziativa, allegria!

Vyman
28-09-2007, 20:24
Sembra parecchia roba ma hai l'opportunità di usare un linguaggio orientato agli oggetti, ergo puoi scatenare le tue più turpi fantasie.

Un esercizio divertente è: scrivi quello che vuoi fare e dopo scrivi come farlo. Ad esempio, voglio che la stampa sia fatta così:

Tabella t = new Tabella();
t.aggiungiGiocatori(unaCollezioneDiGiocatori);
t.stampa();

Qui "unaCollezioneDiGiocatori" sarebbe un Collection<Giocatore> dove "Giocatore" è un oggetto che io immagino sia fatto così:

Giocatore g = new Giocatore();
g.setNome(unNome);
g.setCognome(unCognome);
g.setSquadra(unaSquadra);
g.setPercentualeChenneso(20);
g.setPercentualeBoh(30);
eccetera...

Cioè una collezione di informazioni su un tizio che gioca a pallavolo e... be', francamente non so un cavolo di pallavolo ma immagino che tu abbia una cognizione del dominio del tuo problema.

Una volta che hai scritto "quello che ti piace", fai in modo di farlo accadere.

Insomma, fantasia, creatività, iniziativa, allegria!

Capito, devo mettermi con molta calma a studiare la roba e poi provarla... grazie!!