PDA

View Full Version : [java Swing jFrame] Come cambiare elementi visualizzati in un Jframe


TalosPrime
05-06-2010, 16:58
Ciao,
Sto creando un'interfaccia grafica per inserimento dati e visualizzazione. Sono alle prime armi con lo Swing quindi utilizzo l'editor visuale di Netbeans per crearle.
La mia domanda è:
-Come faccio, una volta che l'utente inserisce i dati e preme il jButton per cambiare gli elementi all'interno del JFrame? C'è da settare qualche variabile tipo setVisible? Devo inserlo nel codice dell'evento?

Grazie

//Ubuntu 9.10, NetBeans 6.7.1, jdk1.6.0;

maro89
05-06-2010, 17:33
in pratica quando te crei un bottone dei anche implementare all'interno del codice un ascoltatore (ActionListeners).

detto ascoltatore in pratica (scusami per la frase) rimane in ascolto fino a quando te premi il bottone.

alla pressione del bottone entra in funzione il metodo actionPerformed che svolge le funzioni o metodi che hai inserito all'interno.

un esempio


public class prova extends JFrame implements ActionListeners{
JButton b;
JTextField f;
public prova(){
super("prova");
f=new JTextField("eta");
add(f).setVisible(true);
b=new JButton("cambio");
add(b).setVisible(true);
b.addActionListener(this);
}

public actionPerformed(ActionEvent arg0){
if((String)f.getText()=="eta"){
f.setText("beta").setEditable(false);
}else {
f.setText("eta");
}

}


spero di essermi stato utile!

TalosPrime
05-06-2010, 18:58
in pratica quando te crei un bottone dei anche implementare all'interno del codice un ascoltatore (ActionListeners).

detto ascoltatore in pratica (scusami per la frase) rimane in ascolto fino a quando te premi il bottone.

alla pressione del bottone entra in funzione il metodo actionPerformed che svolge le funzioni o metodi che hai inserito all'interno.

un esempio


public class prova extends JFrame implements ActionListeners{
JButton b;
JTextField f;
public prova(){
super("prova");
f=new JTextField("eta");
add(f).setVisible(true);
b=new JButton("cambio");
add(b).setVisible(true);
b.addActionListener(this);
}

public actionPerformed(ActionEvent arg0){
if((String)f.getText()=="eta"){
f.setText("beta").setEditable(false);
}else {
f.setText("eta");
}

}


spero di essermi stato utile!

Ti ringrazio per la risposta.
Il fatto è che quanto l'utente preme il tasto Cerca, devo "stavolgere" tutto il frame.
Il metodo che NetBeans mi autogenera è private void cercaTrenoButtonActionPerformed(java.awt.event.ActionEvent evt) e poi io costruisco il corpo del metodo.
Una volta premuto il tasto l'utente dovrebbe riceve una nuova "schermata" che con la prima non mantiene né i campi né i bottoni (praticamente resta uguale solo la grandezza della finestra)...
Per fare ciò devo creare un'altro Frame?

maro89
05-06-2010, 19:55
Ti ringrazio per la risposta.
Il fatto è che quanto l'utente preme il tasto Cerca, devo "stavolgere" tutto il frame.
Il metodo che NetBeans mi autogenera è private void cercaTrenoButtonActionPerformed(java.awt.event.ActionEvent evt) e poi io costruisco il corpo del metodo.
Una volta premuto il tasto l'utente dovrebbe riceve una nuova "schermata" che con la prima non mantiene né i campi né i bottoni (praticamente resta uguale solo la grandezza della finestra)...
Per fare ciò devo creare un'altro Frame?

guarda anch'io avevo lo stesso problema e per ora(nel senso che non ne so cosi tanto di java da poter fare quello che vorrei) ho risolto con JDialog.

JDialog in pratica ti costruisce un nuovo frame(cioè come se fosse una finestra in poche parole) con un nuovo JPanel all'interno quindi c puoi mettere tutto quello che vuoi.

per esempio (come ho fatto io nel mio programmino)

alla pressione del pulsante nel MainFrame(cosi ho chiamato la finestra principale) mi apre una JDialog con all'interno dei JTextField e un altro JButton e una volta chiusa la finestra si ritorna automaticamente al MainFrame

banryu79
07-06-2010, 08:46
Ti ringrazio per la risposta.
Il fatto è che quanto l'utente preme il tasto Cerca, devo "stavolgere" tutto il frame.
[...cut...]
Per fare ciò devo creare un'altro Frame?

Conosci CardLayout?
E' un layout manager particolare, che ti permette di definire più "configurazioni" da proiettare sulla stessa superficie (sullo stesso frame/dialog che sia).
L'idea è che definisci le tue configurazioni, all'apertura della finestra CardLayout mostra la prima, all'action event del pulsante CardLayout mostra la seconda.
Link utili:
Java Sun tutorial su cardlayout. (http://java.sun.com/docs/books/tutorial/uiswing/layout/card.html)
Una recende discussione su questo forum su CardLayout. (http://www.hwupgrade.it/forum/showthread.php?t=2195200&highlight=CardLayout)

TalosPrime
07-06-2010, 16:02
guarda anch'io avevo lo stesso problema e per ora(nel senso che non ne so cosi tanto di java da poter fare quello che vorrei) ho risolto con JDialog.

JDialog in pratica ti costruisce un nuovo frame(cioè come se fosse una finestra in poche parole) con un nuovo JPanel all'interno quindi c puoi mettere tutto quello che vuoi.
[...]

Buona idea ma non fa per me, non ho bisogno di una nuova finestra. Cmq grazie


Conosci CardLayout?
E' un layout manager particolare, che ti permette di definire più "configurazioni" da proiettare sulla stessa superficie (sullo stesso frame/dialog che sia).

Il mio problema è che (purtroppo!) non ho molto tempo per la GUI del mio progetto, anche perché, per le mie esigenze, la GUI è secondaria. Quindi ho visto un po' di tutorial e qualche guida sui concetti base, per il resto mi affido a netBeans.


Java Sun tutorial su cardlayout. (http://java.sun.com/docs/books/tutorial/uiswing/layout/card.html)
Interessante, quando avrò tempo gli darò un'occhiata grazie


Una recende discussione su questo forum su CardLayout. (http://www.hwupgrade.it/forum/showthread.php?t=2195200&highlight=CardLayout)
Molto interessante per i miei scopi. La mia idea era di rendere visibile e invisibili i vari panel inseriti nel frame, anche perché l'utente può poter ritornare alla Home e alle varie schermate.
Come posso fare in netbeans (che autogenera molto del codice) per inserire e disinserire(rendere non visibili o rimuoverli?) i vari panel?

Vi ringrazio per il tempo, se avete bisogno di qualcosa riguardante Thread, concorrenza, socket e gestione flussi, e info su Java chiedete pure

//Ubuntu 9.10, netBeans 6.7.1, jdk 1.6.0