Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Principiante Java: Form

    Ciao a tutti!
    Ho un piccolo problema con java swing... o awt ancora non ho capito.
    devo implementare un piccolo programmino che si basa su alcuni form.
    ora...questi form non sono costruiti nè da applet nè da servlet, ma "semplicemente"
    con l'ausilio di awt.event.
    dove sta il problema...
    dalla finestra principale posso accedere a diversi form.
    ogni form ha i suoi bei campi per immettere i dati, e
    poi 2 fantastici bottoni di "conferma" e "annulla" (fantasia zero...)
    qui viene il bello...
    Se pigio Conferma, riesco a memorizzare (forse) i dati della form.
    Se pigio Annulla.... è un casino!

    1) non succede nulla!
    2) si chiude tutto il programma!
    3) si apre la finestra di windows Proprietà Schermo!!!


    Il codice che ho scritto (e scopiazzato...) è più o meno questo

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;


    public class Form extends JFrame{

    private JPanel firstpan = new JPanel();
    private JPanel secondpan = new JPanel();
    private Dati dati = new Dati();
    private String nome, cognome, indir, tel;


    public Form() {
    super("Form");
    setBounds(400,400, 320,320);
    try {

    Init();
    }
    catch(Exception e) {
    e.printStackTrace();
    }
    }

    private void Init(){
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.out.println("Program exited with 0 executions");
    System.exit(0);
    }
    });

    firstpan.setSize(1,150);
    firstpan.setLayout(new GridLayout(4,1));
    firstpan.add(dati.Lnome);
    firstpan.add(dati.TFnome);
    firstpan.add(dati.Lcognome);
    firstpan.add(dati.TFcogn);
    firstpan.add(dati.Lindir);
    firstpan.add(dati.TFindir);
    firstpan.add(dati.Ltel);
    firstpan.add(dati.TFtel);
    dati.TFnome.getSelectedText();
    dati.TFnome.addActionListener(new TextFieldHandler(dati.TFnome));
    dati.TFcogn.addActionListener(new TextFieldHandler(dati.TFcogn));
    dati.TFindir.addActionListener(new TextFieldHandler(dati.TFindir));
    dati.TFtel.addActionListener(new TextFieldHandler(dati.TFtel));
    dati.ok.addActionListener(new ButtonHandler(dati.ok));
    dati.annulla.addActionListener(new ButtonHandler(dati.annulla));

    secondpan.setLayout(new GridLayout(1, 2));
    secondpan.setLayout(new GridLayout(1,2));
    secondpan.add(dati.ok);
    secondpan.add(dati.annulla);

    getContentPane().add(BorderLayout.NORTH, firstpan);
    getContentPane().add(BorderLayout.SOUTH, secondpan);
    setVisible(true);

    }





    class TextFieldHandler implements ActionListener {

    JTextField a = new JTextField();
    public TextFieldHandler(JTextField eve) { a = eve;}

    public void actionPerformed(ActionEvent e)
    {

    if( a == dati.TFnome){
    nome=e.getActionCommand() + "\r ";

    } else if(a == dati.TFcogn) {
    cognome=e.getActionCommand() + "\r ";

    } else if (a == dati.TFindir){
    indir=e.getActionCommand() + "\r ";

    }else if (a==dati.TFtel){
    tel=e.getActionCommand()+ "\r ";
    };



    }
    }


    class ButtonHandler implements ActionListener {

    JButton a = new JButton();

    public ButtonHandler(JButton ric) {a=ric;}

    public void actionPerformed(ActionEvent e) {

    if (a == dati.ok) {
    dati.conf=nome+cognome+indir+tel;
    System.out.println(dati.conf);

    } else if (a == dati.annulla){

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //Con questa oprazione non fa nulla!
    // Con setDeafaultCloseOperation(Form.EXIT_ON_CLOSE); mi esce la finestra di propr dello schermo!!!

    };

    }

    }

    public static void main(String argv[]) {
    Form f = new Form();
    f.show();

    }


    }
    Spero qualcuno possa darmi una mano....
    grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Innanzitutto la prossima volta utilizza i tag [CODE*][/CODE*] (senza l'asterisco) per scrivere il codice così si legge meglio, mantenendo le indentazioni (vedi i codici qui sotto).

    Poi, devo dire che non so da dove tu abbia copiato quel codice, ma è alquanto brutto, contorto e, credo, anche sbagliato.

    Segui una linea generale nel costuire finestre con elementi (come bottoni, ecc):
    costruisci una classe per la finestra...
    codice:
    public class Frame extends JFrame {
       ...
    }
    e inseriscici tutto ciò che deve contenere (bottoni, textfield, ecc):
    codice:
    public class Frame extends JFrame {
       private JButton bottone1;
       private JButton bottone2;
       ...
       private JTextField textField1;
       ...
    
       ...
    }
    Poi, nel costruttore, crei tutti gli oggetti e li inserisci:
    codice:
       public Frame() {
          bottone1 = new JButton("Pulsante 1");
          bottone2 = new JButton("Pulsante 2");
          ...
          textField1 = new JTextField();
          ...
    
          getContentPane().add( bottone1 );
          getContentPane().add( bottone2 );
          ...
          getContentPane().add( textField1 );
    
          setVisible(true);
       }
    Poi, se vuoi, ti crei un ascoltatore per ciascun pulsante e glielo associ. In questo caso può essere utile costruire delle classi apposite per gli ascoltatori, ma queste non devono anche costruirsi il pulsante e visualizzarlo: sono degli ascoltatori!
    Una cosa: non usare gli Handler... mai sentiti nominare e mai visti usare e sicuramente non utili al tuo scopo.
    codice:
    public class Ascoltatore1 implements ActionListener {
       public void actionPerformed(ActionEvent ae) {
          ... // E' stato premuto il pulsante, fai ciò che devi fare
       }
    }
    ...
    
    public class Frame extends JFrame {
       ...  // I tuoi oggetti
       public Frame() {   // Il costruttore
          ...
          pulsante1.addActionListener( new Ascoltatore1() );
          pulsante2.addActionListener( new Ascoltatore2() );
       }
    }
    Quando avrai risistemato il codice, prova a farlo andare: otterrai, forse, degli errori, qualcosa non funzionerà... allora ripostalo e vedremo cosa non va. Con il codice in quello stato non ne veniamo fuori facilmente.

    PS: Ti apre le proprietà dello schermo? Interessante... veramente molto interessante!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    grazie per i consigli di buona programmazione. in realtà il codice postato non è quello su cui sto lavorando, ma è un esempio veloce che ho scritto per far capire il problema...
    mi congratulo con me stessa per non essermi fatta capire.
    provo di nuovo, magari senza codice (che è meglio :master: ).

    il mio bel pulsantino "Annulla" deve semplicemente chiudere quel form. la domanda è "Esistono altre istruzioni oltre a setDefault etc etc che fanno ciò?".

    ti ringrazio ancora e nei prox giorni riposto quello schifo che avevo combinato, in modo decente

    a presto

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Sì... per far sì che un pulsante chiuda un JFrame, senza chiudere tutta l'applicazione si può agire in diversi modi: si può usare setDefautCloseOperation() impostandolo per la chiusura della finestra e non dell'applicazione, oppure si può agire semplicemente sui metodi di JFrame.
    Questo esempio agisce sui metodi su JFrame: il metodo dispose() chiude la finestra corrente, senza chiudere l'appilcazione:
    codice:
    JButton jbAnnulla = new JButton("Annulla");
    jbAnnulla.addActionListener( new ActionListener() {
       public void actionPerformed(ActionEvent ae) {
          chiudiFrame();
       }
    });
    
    ...
    
    private void chiudiFrame() {
       dispose();
    }
    Questo codice, invece, può essere utilizzato per impostare lo stesso effetto quando l'utente clicca sulla X della finestra:
    codice:
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    grazie lele! ora funziona!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.