|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2003
Città: Roma
Messaggi: 88
|
[Java] creare lista JComboBox piu velocemente
Dunque, il problema è banale ma non riesco a risolverlo
Praticamente mi occorre creare un JComboBox che permetta di scegliere un valore da 1 a 9999, e questo oggetto va a finire in una maschera che viene replicata per 12 volte. Codice:
String[] combolist = new String[10000];
for (int i=1; i<10000; i++)
combolist[i] = ""+i;
final JComboBox combo = new JComboBox(combolist);
Grazie
__________________
Config: Asus P5QL-E, Core2Duo E8400 3,0GHz, POV GeForce 9800GTX+, HD Seagate Barracuda 500GB, 4GB Kingston DDR800 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Ma ripeti 12 volte il codice che hai scritto per caso?
__________________
iMac 27" 5K |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Aug 2003
Città: Roma
Messaggi: 88
|
Ti spiego, praticamente è una interfaccia grafica che deve gestire 12 oggetti separati. Quindi quel codice che ho postato sopra è nel costruttore di questa classe e quando creo l'interfaccia, vengono aggiunti 12 oggetti in un tabbedpane che racchiude tutto
ma ci mette veramente troppo, se tolgo quel ciclo impiega qualcosa come 15 secondi in meno ad avviarsi (su 25 totali).. lo so che il tempo è relativo, però è buon indice che qualcosa non quadra
__________________
Config: Asus P5QL-E, Core2Duo E8400 3,0GHz, POV GeForce 9800GTX+, HD Seagate Barracuda 500GB, 4GB Kingston DDR800 |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
15 secondi per eseguire quel ciclo???
Sicuro che non siano millisecondi?? Cmq posta anche il resto del codice così vediamo dove stà l'intoppo che ti rallenta così tanto
__________________
iMac 27" 5K |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Aug 2003
Città: Roma
Messaggi: 88
|
Codice:
public class Program {
public program(){
...
final JComboBox nominalflow_combo = new JComboBox(LIST);
...
}
private static final String LIST[];
static{
LIST = new String[9999];
for (int i=0; i<9999; i++)
LIST[i] = ""+(i+1);
}
}
il programma principale, crea 12 istanze dell'oggetto program che va a sbattere nella interfaccia dentro un tabbedpane. Codice:
public class main {
Program[] unit = new Program[PROGRAM_MAX];
for (int i=0; i<PROGRAM_MAX; i++){
unit[i] = new Program();
}
JTabbedPane tabbedPane = new JTabbedPane();
for (int i=0; i<PROGRAM_MAX; i++)
tabbedPane.addTab("Program "+(i+1), null, unit[i].getPanel(),"Program nr: "+(i+1));
...
ora, se io al posto di new JComboBox(LIST) credo un combobox vuoto JComboBox() la differenza per caricare il programma è di ben 17 secondi (!!!) possibile che per popolare 12 box mi ci metta così tanto? Probabilmente mi sfugge qualcosa..
__________________
Config: Asus P5QL-E, Core2Duo E8400 3,0GHz, POV GeForce 9800GTX+, HD Seagate Barracuda 500GB, 4GB Kingston DDR800 |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ehm, ma così, per curiosità, PROGRAM_MAX quanto vale?
Un'altra cosa. Potresti per favore spiegare a cosa serve una ComboBox che permette all'utente di scegliere un valore compreso tra 1 e 9999?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 05-12-2008 alle 12:51. |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Aug 2003
Città: Roma
Messaggi: 88
|
PROGRAM_MAX vale 12
e per la combo mi serve così perchè è più immediato selezionare in questo modo il valore, cmq non mi pare normale che ci metta cosi tanto per popolare delle liste, sbaglio?
__________________
Config: Asus P5QL-E, Core2Duo E8400 3,0GHz, POV GeForce 9800GTX+, HD Seagate Barracuda 500GB, 4GB Kingston DDR800 |
|
|
|
|
|
#8 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quindi questo ciclo istanzia 12 oggetti di tipo Program:
Codice:
public class main {
Program[] unit = new Program[PROGRAM_MAX];
for (int i=0; i<PROGRAM_MAX; i++){
unit[i] = new Program();
}
JTabbedPane tabbedPane = new JTabbedPane();
for (int i=0; i<PROGRAM_MAX; i++)
tabbedPane.addTab("Program "+(i+1), null, unit[i].getPanel(),"Program nr: "+(i+1));
...
Questo di per se non sarebbe il collo di bottiglia [intendo il fatto di istanziare 10.000 stringhe]. Tu stesso hai notato in precedenza: Quote:
Passare come argomento al costruttore di JComboBox un array (in questo specifico caso di String) significa il processo di costruzione del Combo Box Model associato a quel JComboBox sarà un tantino pesantuccio se l'array contiene un numero notevole di items. Prova un po' a ficcare solo 100 String nell'array LIST invece delle 10.000 attuali e dovresti notare una certa differenza di tempistica (e questo a prescindere dal fatto che così facendo istanzierai solo 100 String invece che 10.000: l'istanziazione delle 10.000 String di per se non deve essere un problema, il problema è appunto creare un Combo Model così esageratamente grande, quando mai ti è capitato di vedere ComboBox con 10.000 items??? A me MAI fin'ora)... Sospetto che il problema sia concettuale, cioè che tu stia usando lo strumento sbagliato per raggiungere il risultato che ti serve ottenere, il che ci porta alla seconda domanda che ti ho fatto: Quote:
1- istanziando 10.000 String; 2- creando un(in realtà 12) Combo Model enorme di 10.000 items; Non è che forse te la puoi cavare con qualche altro controllo? Per esempio uno Spinner? Nota: sto scrivendo di fretta. A scanso di equivoci: chiedo scusa se i toni possono sembrare provocatori, non ho alcuna intenzione di offenderti o fare del sarcasmo, le osservazioni che ho postato le ho postate con l'intento di far cadere la tua attenzione su determinate problematiche nella speranza di stimolare da parte tua delle riflesisoni utili. Magari avevi già pensato a tutto questo e io non ho capito bene la situazione: capita, sono nubbio Ciao.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 05-12-2008 alle 15:58. |
||
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Aug 2003
Città: Roma
Messaggi: 88
|
mmm hai perfettamente ragione, non pensavo fosse così oneroso il dover creare quei combobox comunque, ora mi studio un po' JSpinner e vedo se può fare al caso mio e come modificare il resto del codice eventualmente, ti ringrazio per la dritta
Considerando che il programma in tutto impiega qualcosa come 48 secondi a caricare mi sa che dovrò fare un bel po' di alleggerimenti Sicuramente sbaglio qualcosa a livello di gestione degli eventi, ma eventualmente aprirò un altro thread, cmq provo così e vediamo se posso limare quei 17 secondi
__________________
Config: Asus P5QL-E, Core2Duo E8400 3,0GHz, POV GeForce 9800GTX+, HD Seagate Barracuda 500GB, 4GB Kingston DDR800 |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Prova a controllare: - i cicli; - il codice che hai inserito nei metodi di gestione degli eventi dei vari Listener; Se hai qualche sospetto su qualche pezzo di codice, specie per i Listener, non aprire un altro thread (nn c'è n'è veramente bisogno) ma posta qui sotto, io quando e per quello che posso ti do una mano volentieri.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:25.












Sicuramente sbaglio qualcosa a livello di gestione degli eventi, ma eventualmente aprirò un altro thread, cmq provo così e vediamo se posso limare quei 17 secondi








