View Full Version : [Java] Dubbio su Swing e JFrame
Dopo essermi letto un tutorial per creare interfacce grafiche con swing e aver realizzato una piccola finestra (JFrame) con relativa gestione di eventi mi è venuto un dubbio.
Volevo realizzare un'interfaccia a più livelli nel senso che premuto un pulsante della prima schermata l'interfaccia cambiasse (come se entrasse in una nuova pagina). Poi magari nella seconda finestra un pulsante che mi facesse ritornare nella prima interfaccia.
Per fare una cosa del genere devo ideare un controllo del pulsante che mi chiuda la JFrame precedente e ne apra una nuova delle stesse dimensioni di quella vecchia e posizionata con l'angolo in alto a sinistra nello stesso punto?
sottovento
05-05-2006, 09:36
Ciao,
in effetti, puoi fare cosi'. Comunque (e' una mia opinione personale), non mi sembra la modalita' piu' semplice e neppure graficamente la migliore.
Potresti pensare a strutturare la tua interfaccia grafica in altro modo, per esempio usando una JTabbedPane, oppure dividere la tua schermata mediane JSplitPane e creare un tree sulla sinistra, oppure semplicemente aprendo un'altra JFrame/JDialog.....
High Flying
Sottovento
Secondo me (se non è tua intenzione usare i tabs) dovresti creare vari composite dentro la finestra e poi rendere visibile solo quello che ti interessa facendo scomparire tutti gli altri.
Ok, e se faccio, come dico io, che chiudo il JFrame e ne apro uno nuovo, c'è un metodo (e se si quale?) per capire dove effettivamente era posizionato il JFRame che ho chiuso? In effetti uno potrebbe avere spostato la finestra iniziale dalla posizione iniziale.
Secondo me (se non è tua intenzione usare i tabs) dovresti creare vari composite dentro la finestra e poi rendere visibile solo quello che ti interessa facendo scomparire tutti gli altri.
Ecco forse questa è la strada che fa per me.. ora mi informo e smanetto vediamo cosa ne esce.
Ok, e se faccio, come dico io, che chiudo il JFrame e ne apro uno nuovo, c'è un metodo (e se si quale?) per capire dove effettivamente era posizionato il JFRame che ho chiuso? In effetti uno potrebbe avere spostato la finestra iniziale dalla posizione iniziale.
diciamo che non è una soluzione molto elegante.. :D comunque memorizzi il risultato di getLocation() se non mi sbaglio e poi con setLocation() imposti la posizione della nuova finestra.
ps. ti consiglio di lavorare con http://java.sun.com/j2se/1.5.0/docs/api/index.html aperto ;)
sottovento
05-05-2006, 10:07
diciamo che non è una soluzione molto elegante.. :D comunque memorizzi il risultato di getLocation() se non mi sbaglio e poi con setLocation() imposti la posizione della nuova finestra.
ps. ti consiglio di lavorare con http://java.sun.com/j2se/1.5.0/docs/api/index.html aperto ;)
Confermo. In piu' puoi avere le dimensioni con getSize() e settarle nuovamente con la setSize ()
High Flying
Sottovento
Avete da indicarmi un tutorial o una guida per utilizzare le Component? Sul tutorial ufficiale non c'è.
guarda.. ecco un esempio puramente indicativo di quello che intendevo:
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Prova extends JFrame {
private JPanel jContentPane1 = null;
private JPanel jContentPane2 = null;
private JButton jButton1 = null;
private JButton jButton2 = null;
private JLabel jLabel1 = null;
private JLabel jLabel2 = null;
public static void main(String[] args) {
JFrame frame = new Prova();
frame.setVisible(true);
}
public Prova() {
super();
jLabel1 = new JLabel();
jLabel1.setText("schermata1:");
jButton1 = new JButton();
jButton1.setText("prossima schermata");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
jContentPane1.setVisible(false);
jContentPane2.setVisible(true);
}
});
jContentPane1 = new JPanel(new BorderLayout());
jContentPane1.add(jLabel1, BorderLayout.CENTER);
jContentPane1.add(jButton1, BorderLayout.SOUTH);
jContentPane1.setVisible(true);
jLabel2 = new JLabel();
jLabel2.setText("schermata2:");
jButton2 = new JButton();
jButton2.setText("precedente schermata");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
jContentPane2.setVisible(false);
jContentPane1.setVisible(true);
}
});
jContentPane2 = new JPanel(new BorderLayout());
jContentPane2.add(jLabel2, BorderLayout.CENTER);
jContentPane2.add(jButton2, BorderLayout.SOUTH);
jContentPane2.setVisible(false);
this.setSize(300, 200);
this.setContentPane(new JPanel());
this.setTitle("JFrame");
this.add(jContentPane1);
this.add(jContentPane2);
}
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.