PDA

Visualizza la versione completa : [java] Interfaccia Grafica


fraper
14-01-2005, 18:08
Salve a tutti...sono un novello di java e sto "giocando" con le interfaccie....
...non riesco però a concludere niente....qualcuno può aiutarmi?
io vorrei semplicemente, disegnare una piccola finestra con due bottoni....vorrei che cliccando il primo compaiano due campi di testo (senza ovviamente i due bottoni di prima...come se si ridisegnasse una nuova finestra che contiene solo i due campi di testo) e cliccando il secondo venga chiusa la finestra...

come fare? qualcuno può farmi un esempio o mi possa mostrare una guida su come fare?

P.s. la finestra riesco a disegnarla ma non riesco ad implementare la funzionalità successiva!

Ringrazio tutti anticipatamente!

Dorcan82
14-01-2005, 18:19
ogni widget dell'interfaccia e quindi bottoni, barre di scorrimento ect.....utilizzano una gamma di classi comunemente chiamata ascoltatori di eventi e ne esistono di vario tipo...ad esempio ai bittoni deve essere sempre associato un actionListener.
Come si fa:

1.la classe che definisce la GUI deve implementare l'interfaccia java.awt.event.ActionPerformed

2. Cre il bottone e associagli un ascoltatore di eventi così:
JButton bottone=new JButton("Bottone");
bottone.addActionListener(this);
poi associ il bottone al pannello della GUI

3. Viene ereditato un metodo chiamato actionPerformed ed questo ultimo che tu devi manipolare per capire quale bottone ha scatenato l'evento del click...ad esempio, ed effettuare le operazioni necessarie come la stampa di testo o quello che ti pare.....

il codice per riconoscere la sorgente che scatena l'evento è questo:
java.awt.Event event è un oggetto passato come argomento ad actionPerformed.

if(event.getSource==bottone){
//tue isctruzioni
}



spero di essere stato chiaro....forse non funziona tutto ma in linea di massima questi sono i passi da seguire

:ciauz: :ciauz:

unomichisiada
14-01-2005, 20:22
Ti consiglio di scaricarti e leggerti il tutorial in HTML della sun,è veramente ben fatto.Ovviamente in English.Purtroppo non ti so indicare un link preciso,cmq il sito ha un motore di ricerca che ti aiuterà a trovarlo

fraper
15-01-2005, 13:50
Grazie raga per i suggerimenti...ma non sono così terra terra....vi posto il mio codice....
compilando ed eseguendo visualizzerete una finestra con due bottoni...cliccando sul bottone "Esci", viene chiusa la finestra...cliccando sul bottone "Campo di testo", verrà stampata su console una stringa....adesso...cosa voglio fare? Io vorrei che cliccando su "campo di testo" mi venga creato un campo di testo all'interno della finestra....naturalmente senza i due bottoni precedentemente creati...adesso dato che non ho tanta dimestichezza con le interfacce, vorrei sapere come procedere....è necessario ridisegnare la finestra? quindi una volta cliccato su "campo di testo" bisogna chiudere la finestra e ricrearne un'altra? o bisogna procedere in un altro modo?
qualcuno potrebbe postarmi il codice per fare quello che ho indicato sopra?

Grazie ancora a tutti!


CODICE

import java.awt.*;
import java.awt.event.*;

public class Finestra extends Frame implements ActionListener {

Button bCrea, bEsci;
public static void main (String argv[]) {
Finestra ist;
ist = new Finestra();
}

public Finestra(){
setLayout(null);
setBounds (30, 10, 300, 200);
setBackground (Color.lightGray);
setTitle("Finestra Creata");

bCrea = new Button ("Campo di Testo");
bCrea.setBounds(40, 80, 100, 30);
bCrea.addActionListener(this);

bEsci = new Button ("Esci");
bEsci.setBounds(150, 80, 100, 30);
bEsci.addActionListener(this);

add (bCrea);
add (bEsci);
setVisible(true);
}

public void actionPerformed(ActionEvent e){
if (e.getActionCommand().equals(bCrea.getActionComman d())){
System.out.println("Apro la seconda pagina");

}
if (e.getActionCommand().equals(bEsci.getActionComman d()))
System.exit(0);
}
}

Andrea1979
15-01-2005, 14:56
import java.awt.*;
import java.awt.event.*;

public class Finestra extends Frame implements ActionListener {

Button bCrea, bEsci, bEsci2;
Panel mainP, textP;
TextField textf;

public static void main (String argv[]) {
Finestra ist = new Finestra();
}

public Finestra(){

setBounds (30, 10, 300, 200);
setBackground (Color.lightGray);
setTitle("Finestra Creata");

mainP = new Panel();
bCrea = new Button ("Campo di Testo");
bCrea.setBounds(40, 80, 100, 30);
bCrea.addActionListener(this);

bEsci = new Button ("Esci");
bEsci.setBounds(150, 80, 100, 30);
bEsci.addActionListener(this);

bEsci2 = new Button ("Torna indietro");
bEsci2.setBounds(150, 80, 100, 30);
bEsci2.addActionListener(this);


textf = new TextField(15);

mainP.add(bCrea);
mainP.add(bEsci);
mainP.setVisible(true);

textP = new Panel();
textP.add(textf);
textP.add(bEsci2);

this.add(mainP);
this.setVisible(true);


}

public void actionPerformed(ActionEvent e){
if (e.getActionCommand().equals(bCrea.getActionComman d())){
mainP.setVisible(false);
textP.setVisible(true);
this.add(textP);
this.validate();
}

if (e.getActionCommand().equals(bEsci2.getActionComma nd())) {
textP.setVisible(false);
mainP.setVisible(true);
this.validate();
}
if (e.getActionCommand().equals(bEsci.getActionComman d()))
System.exit(0);
}
}

Un paio di commenti:

ho messo tutti gli elementi, finestra per finestra, in pannelli differenti e quindi aggiunto i pannelli al tuo frame.

il metodo validate serve perché quando si aggiungono elementi ad una finestra, non è detto che vengano ridisegnati correttamente (meglio: a volte non vengono ridisegnati affatto): validate si assicura che la finestra dell'awt venga ridisegnata per intero, quindi vengono effettivamente mostrati i pannelli aggiunti.

Saluti

ale500
15-01-2005, 20:06
hai mai provato a cercare degli IDE che fanno tutto oppure dei plug-in?

se ad esempio utilizzi Eclipse prova a cercare il Visual Editor Project, plug-in molto utile che permette di creare con abbastanza facilità (simile a Visual Basic) l'interfaccia della tua applicazione, il risultato, oltre che più veloce sarà anche più "pulito".

fraper
16-01-2005, 12:43
Grazie ale500 e grazie Andrea1979

fraper
16-01-2005, 14:38
Ciao Andrea1979, ho provato il tuo codice e funziona alla grande!
Però ho un problema, se provo a modificare i parametri del setBounds ad esempio per un bottone, non succede niente...è come se la posizione del bottone sia loccata!...Come fare? Grazie ancora

ale500
16-01-2005, 15:06
come layout del frame contenente il bottone devi mettere Absolute...

fraper
17-01-2005, 00:59
ho provato con

AbsoluteLayout absolute = new AbsoluteLayout();
setLayout(absolute);

ma non va!

Come devo fare?

Loading