Originariamente inviato da Luca_19
Nel metodo main della classe java principale potrei istanziare nuove finestre (definite con nuove classi), ma mi sfugge come mantenere il controllo di tutta l'applicazione. ES: come faccio, quando arrivo al tasto NEXT dell'ultima finestra, a riattivare la 1a finestra? C'è anche da considerare che devo mantenere la memoria delle risposte che vengono date alle domande.
Qualsiasi spunto/suggerimento è gradito!
Non ho aggiunto quanto vorresti realizzare tu, per questioni di tempo e per non consegnarti il codice bello e pronto. :P
Inizio con il rispondere alle righe quotate qui sopra.
Quello sarebbe un errore! Il metodo main() viene utilizzato per lanciare un applicazione, al suo interno, soprattutto quando si tratta di Swing (non utilizzare AWT, è obsoleto ormai... usa Swing, una sua estensione), compare solamente il codice che crea un nuovo thread e chiama un altro metodo che si occuperà di creare il frame principale.
Il codice che dici tu, deve comparire all'interno del costruttore, e comunque essere una variabile di istanza se ti serve fuori da quella classe!
Ecco un esempio scritto su 2 piedi:
codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class Finestra1 extends JFrame implements ActionListener {
// Il frame precedente lo memorizzi qui
private EsempioFinestre ef;
private JButton back;
Finestra1(EsempioFinestre ef) {
super("Seconda Finestra");
this.ef = ef;
JPanel pannello = new JPanel();
back = new JButton("Back");
pannello.add(back);
add(pannello);
// Ascolto l'eventuale pressione di back
back.addActionListener(this);
}
// Quando viene premuto...
public void actionPerformed(ActionEvent ae) {
// Rendo visibile il frame precedente
ef.setVisible(true);
// Chiudo l'attuale
dispose();
}
}
// Finestra principale
class EsempioFinestre extends JFrame implements ActionListener {
// Finestra che andremo a creare
private Finestra1 f1;
// Questo ci permette di aprire la nuova finestra
private JButton next;
// Costruttore
EsempioFinestre() {
super("Prima Finestra");
// Posiziono il bottone ed il pannello che lo contiene sul frame
JPanel pannello = new JPanel();
next = new JButton("Next");
pannello.add(next);
add(pannello);
// Ascolta la pressione sul bottone
next.addActionListener(this);
// Questa è la chiusura del frame, se premi X insomma
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// Quando un evento viene generato
public void actionPerformed(ActionEvent ae) {
// Creo il frame secondario
f1 = new Finestra1(this);
// Setto la dimensione
f1.setSize(300,300);
f1.setVisible(true);
// Questo è il nostro frame, quello attuale
// quindi lo nascondo
setVisible(false);
}
// Lancio l'applicazione rendendo visibile la finestra principale
public static void makeGUI() {
EsempioFinestre ef = new EsempioFinestre();
ef.setSize(400,400);
ef.setVisible(true);
}
// Creo il nuoto thread
public static void main(String[] args) {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
makeGUI();
}
});
} catch(Exception e) {}
}
}
Il codice è commentato, ma se dovessi avere problemi, chiedi