La prima cosa che dovresti evitare, come dicevo in precedenza, è lavorare in modo parallelo sui vettori.
Intendo il punto del codice in cui fai :
Lavorare in questo modo va contro i principi della programmazione ad oggetti (ad esempio ti impedisce di sfruttare l'ereditarietà e l'incapsulazione), e rende il codice difficile da comprendere e da modificare.codice:ImageIcon[] immagini = new ImageIcon[15]; JLabel listaIcone[]=new JLabel15]; JLabel costi[]=new JLabel[15]; JTextArea areedescr[]=new JTextArea[15]; JTextArea areetest[]=new JTextArea[15]; Border border = BorderFactory.createLineBorder(Color.BLACK); JPanel sp[]=new JPanel[15]; JPanel st[]=new JPanel[15]; JPanel sez[]=new JPanel[15]; String stringurl[]=new String[15];
Se per ogni disciplina hai bisogno di gestire un'immagine, un costo, un'area di descrizione etc., allora ti conviene creare una classe (ad esempio PannelloDisciplina), che modelli tutti questi dati (come campi di istanza).
Per il resto non avrei veri e propri link utili da dare, o almeno non uno che spieghi approfonditamente tutto un argomento.
Nel senso che alcune cose che avevo detto in precedenza, come rendere visibile il frame solo come ultima operazione (soprattutto non aggiungere componenti successivamente!), o evitare il setSize () sui componenti, le ho apprese leggendo varie domande e risposte sui forum più che utilizzando una vera e propria guida.
In particolare per il frame usa il metodo pack (), per gli altri componenti i LayoutManager rispettano più spesso la preferredSize dei componenti (vedi getPreferredSize() e setPreferredSize()).
Anche il fatto di utilizzare ascoltatori anonimi per i pulsanti è un'idea che mi sono fatto un po' alla volta leggendo qua e là, ma non è detto che sia sempre la via migliore (leggi qua ad esempio, anche se non ci sono risposte così complete).
In generale il fatto di usare una "anonymous class" come listener ti permette di evitare di ricercare la sorgente dell'evento con actionCommand o getSource() vari e dover passare variabili esternamente alla classe.
Ad esempio il tuo bottone button1 in PrimaFinestra1 potrebbe avere un listener come questo per aprire il nuovo frame e distruggere il vecchio alla pressione del tasto:
Quando però cominci ad aver un sacco di pulsanti e dover riscrivere codice simile per ogni ascoltatore questa via potrebbe non essere la più indicata, anche se è la più sicura.codice:button1.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e) { new ListaDiscipline1(); dispose(); } });
Per quanto riguarda il LookAndFeel, se ti interessa, il tutorial ufficiale lo trovi qui.
Datti una sbirciata, forse è un po' troppo tecnico in diverse parti, al massimo guardati gli esempi.
Io comunque in tutte le mie applicazioni utilizzo il SystemLookAndFeel, lo trovo decisamente il più gradevole e sicuramente è anche il più familiare per l'utente.
Come troverai negli esempi, lo puoi impostare in questo modo :
Negli esempi che trovi in realtà le eccezioni vengono catturate separatamente, a me in questo contesto non interessa...codice:public static void main(String[] args) { try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { // handle exception } // Qui inizializzi l'applicazione ... }