Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    4

    [JAVA] Problema GUI, TextField e Label

    Salve a tutti, scrivo qui perchè sono agli inizi e ho difficoltà a progettare interfacce grafiche con l'AWT.
    La richiesta è questa:Realizzare una GUI formata da 5 TextField in alto, due Label al centro, un Button in
    basso. Si usino in modo appropriato i Panel per evitare che i componenti vengano stirati. I 5 TextField sono in un vettore. Si scriva un ascoltatore da associare al Button della GUI: l'ascoltatore deve calcolare la media dei valori nei 5 TextField e visualizzarla nella Label. I TextField possono con-
    tenere int. Si usi il metodo Integer.parseInt() per convertire uno String in un int. Si faccia attenzione alla media di int. Non si usino classi interne.
    Per la prima parte non ho particolari problemi, mentre non so come fare per l'ascoltatore del bottone., ci ho provato in tutti i modi. Grazie.

    codice:
    import java.awt.*;
    import java.awt.event.*;
    public class GUIMah extends Frame {
      public GUIMah() {
        super("GUIMah");
        Panel p = new Panel(); //nuovo pannello
        
        //vettore di tipo textfield di 5 posizioni
        TextField[] tf = new TextField[5];
        //scorro l'array e ad ogni posizione creo una nuova istanza di Textfield, e l'aggiungo al panel
        for(int i = 0; i<tf.length; i++) {
          tf[i] = new TextField("", 5);
          p.add(tf[i]);
        }
        
        Panel p1 = new Panel();
        int media = 0;
        Label l1 = new Label("Media: ");
        Label l2 = new Label(""+ media);
        p1.add(l1);
        p1.add(l2);
        
        Panel p2 = new Panel();
        Button b = new Button("Media");
        b.addActionListener(new AscoltatoreBottone());
        p2.add(b);
        
        this.add(p, BorderLayout.NORTH);
        this.add(p1, BorderLayout.CENTER);
        this.add(p2, BorderLayout.SOUTH);
        setVisible(true);
        pack();
        //ascoltatore per la window con classe interna,DA MODIFICARE SENZA CLASSE INTERNA
        addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            System.out.println("Finestra Chiusa");
            System.exit(0);
          }
        });
      }
      
        public class AscoltatoreBottone implements ActionListener {
          private int media = 0;
          private TextField[] tf;
          private Label l2;
          public void actionPerformed(ActionEvent e) {
            for(int j = 0; j <=tf.length; j++) {
            media = media + Integer.parseInt(tf[j].getText());
            }
            media = media/5;
            l2.setText("" + media);
            System.out.println("Calcolo Media");
        }
    }
    
    
        public static void main(String[] args) {
          Frame f = new GUIMah();
        }
    }

  2. #2
    Ma il codice è già fatto... quale sarebbe il problema?

    P.S. a parte che non setti i puntatori l2 e ft nell'oggetto della classe AscoltatoreBottone
    Ultima modifica di lolide; 05-01-2014 a 18:28
    lolide
    Java Programmer

    Informati

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    4
    Ho risolto così, però non so come settare le dimensioni della label, essendo dentro al panel:
    codice:
    import java.awt.*;
    import java.awt.event.*;
    public class GUIMah2 extends Frame implements ActionListener {
        
        TextField[] tf;
        Label l1, l2;
        int media = 0;
        
        public void actionPerformed(ActionEvent e) {
            media = 0;
            for(int j = 0; j < tf.length; j++) {
                media = media + Integer.parseInt(tf[j].getText());
            }
            double media1 = media/5;
            l2.setText("" + media1);
            System.out.println("Media = " + media1);
        }
        
        public GUIMah2() {
            super("GUIMah2");
            Panel p = new Panel(); //nuovo pannello
            
            //vettore di tipo textfield di 5 posizioni
            tf = new TextField[5];
            //scorro l'array e ad ogni posizione creo una nuova istanza di Textfield, e l'aggiungo al panel
            for(int i = 0; i<tf.length; i++) {
                tf[i] = new TextField("", 5);
                p.add(tf[i]);
            }
            
            Panel p1 = new Panel();    
            l1 = new Label("Media: ");
            l2 = new Label(""+ media);
            p1.add(l1);
            p1.add(l2);
            
            Panel p2 = new Panel();
            Button b = new Button("Media");
            b.addActionListener(this);
            p2.add(b);
            
            this.add(p, BorderLayout.NORTH);
            this.add(p1, BorderLayout.CENTER);
            this.add(p2, BorderLayout.SOUTH);
            setVisible(true);
            
            pack();
            //ascoltatore per la window con classe interna,DA MODIFICARE SENZA CLASSE INTERNA
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.out.println("Finestra Chiusa");
                    System.exit(0);
                }
            });
        }
        
        public static void main (String[] args) {
            Frame f = new GUIMah2();
        }
    }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.