Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di MOBILUK
    Registrato dal
    Apr 2001
    Messaggi
    225

    [JAVA] Nuovo contenuto all'interno di una finestra

    vorrei fare in modo da cambiare il contenuto di una finestra senza creare nuovi JPanel o JDialog in nuove finestre, ma visualizzando il nuovo contenuto direttamente all'interno della stessa. Ho sottomano la guida di Mokabyte (capitolo relativo alle SWING), ma non ho trovato soluzione a tale questito.

    Qualcuno di voi può aiutarmi?


    Grazie
    ...credi sia aria quella che stai respirando?

  2. #2
    Utente di HTML.it L'avatar di MOBILUK
    Registrato dal
    Apr 2001
    Messaggi
    225
    ...c'è nessuno? :quipy:
    ...credi sia aria quella che stai respirando?

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Beh... esiste un metodo remove(Component c) per rimuovere un componente... poi richiami add(Component c) per aggiungere i nuovi componenti da visualizzare e alla fine richiami setVisible(true) per effettuare il refresh.



    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

  4. #4
    Utente di HTML.it L'avatar di MOBILUK
    Registrato dal
    Apr 2001
    Messaggi
    225
    quindi se ho ben capito, modificherei spesso lo stesso JPanel che contiene il contenuto della finestra, per rimuovere ciò che voglio che sparisca ed aggiungere ciò che voglio che venga visualizzato. Giusto? :quipy:
    ...credi sia aria quella che stai respirando?

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Giusto... Se ti può interessare ho un semplicissimo programmino d'esempio che avevo fatto per divertimento che fa proprio questo (usando le AWT e non Swing, ma i cambiamenti sono minimi). §Una finestra con una casella per introdurre un valore che rappresenta l'ordine di una matrice quadrata di cui calcolare il determinante. Premento su OK viene visualizzata la matrice come una serie di caselle di testo. Se poi si cambia l'ordine della matrice e si ripreme su OK vengono rimosse tutte le caselle di testo della vecchia matrice e ne viene ricostruita e visualizzata una nuova con il nuovo ordine, al posto della precedente.


    Fammi sapere se ti interessa.



    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

  6. #6
    Utente di HTML.it L'avatar di MOBILUK
    Registrato dal
    Apr 2001
    Messaggi
    225
    si, mi interesserebbe (sarei curioso di vedere il codice che permette di cambiare il contenuto di un JPanel); se puoi forniscimi anche le spiegazioni reletive al codice e cosa cambierebbe con SWING.

    grazie 1000!!!
    ...credi sia aria quella che stai respirando?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Allora... questo è il codice che avevo prodotto usando le AWT:

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import java.lang.*;
    
    public class Determinante extends Frame implements ActionListener {
       private class Intestazione extends Panel {
          private class OkButton extends Button {
             public OkButton() {
                super("Ok");
             }
          } //OkButton
    
          private Label lblOrdine;
          public TextField txtOrdine;
          public OkButton ok;
    
          public Intestazione() {
             lblOrdine = new Label();
             lblOrdine.setText("Ordine: ");
             lblOrdine.setAlignment(Label.RIGHT);
             txtOrdine = new TextField();
             ok = new OkButton();
             setLayout(new GridLayout(1,3));
             add(lblOrdine);
             add(txtOrdine);
             add(ok);
          }
       } //Intestazione
    
      private class Matrice extends Panel {
         private int ordine;
         private TextField[] cella;
         private int[][] datimatrice;
    
         public Matrice(int ordine) {
            this.ordine = ordine;
            datimatrice = new int[ordine][ordine];
            cella = new TextField[ordine*ordine];
            for (int i=0; i<(ordine*ordine); i++) {
               cella[i] = new TextField();
            }
            setLayout(new GridLayout(ordine,ordine));
            for (int i=0; i<(ordine*ordine); i++) {
               add(cella[i]);
            }
        }
    
        public int getOrdine() {
           return ordine;
        }
    
        public void azzeraMatrice() {
           for (int i=0; i<(ordine*ordine); i++) {
              cella[i].setText("0");
           }
        }
    
        public long getDeterminante() {
           int pos=0;
           try {
              for (int i=0; i<ordine; i++) {
                 for (int j=0; j<ordine; j++) {
                    datimatrice[i][j] = Integer.parseInt(cella[pos].getText());
                    pos++;
                 }
              }
           } catch (NumberFormatException nfe) {}
           return det(datimatrice, ordine);
        }
    
        private long det (int [][] matricedata, int ordinedato) {
           long risultato = 0;
           int [][] nuova;
           int posiz;
    
           if (ordinedato == 1) {
              risultato = matricedata[0][0];
           } else {
              if (ordinedato == 2) {
                 risultato = matricedata[0][0] * matricedata[1][1] - matricedata[0][1] * matricedata[1][0];
              } else {
                 nuova = new int[ordinedato-1][ordinedato-1];
                 for (int k=0; k<ordinedato;k++) {
                    for (int i=1; i<ordinedato; i++) {
                       posiz = 0;
                       for (int j=0; j<ordinedato; j++) {
                          if (j != k) {
                             nuova[i-1][posiz] = matricedata[i][j];
                             posiz++;
                          }
                       }
                    }
                    if ((k % 2) == 0) {
                       risultato = risultato + matricedata[0][k] * det(nuova, (ordinedato-1));
                    } else {
                       risultato = risultato - matricedata[0][k] * det(nuova, (ordinedato-1));
                    }
                 }
              }
           }
           return risultato;
        }
      }   // Matrice
    
      private class Inferiore extends Panel {
         private class CalcolaButton extends Button {
            public CalcolaButton() {
               super("Calcola");
            }
         } //CalcolaButton
    
         private class AzzeraButton extends Button {
            public AzzeraButton() {
               super("Azzera");
            }
         }
    
         public CalcolaButton calcola;
         public AzzeraButton azzera;
         private Label risultato;
    
         public Inferiore() {
            calcola = new CalcolaButton();
            risultato = new Label("Risultato:");
            azzera = new AzzeraButton();
            setLayout(new GridLayout(1,3));
            add(calcola);
            add(risultato);
            add(azzera);
         }
    
         public void setRisultato(String strRisultato) {
            risultato.setText("Risultato: " + strRisultato);
         }
      } // Inferiore
    
      private class QuitListener implements WindowListener {
         public void windowClosing(WindowEvent e) {
            System.exit(0);
         }
         public void windowOpened(WindowEvent e) {}
         public void windowClosed(WindowEvent e) {}
         public void windowActivated(WindowEvent e) {}
         public void windowDeactivated(WindowEvent e) {}
         public void windowIconified(WindowEvent e) {}
         public void windowDeiconified(WindowEvent e) {}
      } // QuitListener
    
      private Intestazione intestazione;
      private Matrice matrice;
      private Inferiore inferiore;
      private Label msg;
      private final int WIDTH = 500;
      private final int HEIGHT = 500;
      private boolean creataMatrice = false;
    
      public Determinante() {
         intestazione = new Intestazione();
         intestazione.ok.addActionListener(this);
         setLayout(new BorderLayout());
         add(BorderLayout.NORTH, intestazione);
         inferiore = new Inferiore();
         inferiore.calcola.addActionListener(this);
         inferiore.azzera.addActionListener(this);
         add(BorderLayout.SOUTH, inferiore);
         addWindowListener( new QuitListener() );
         msg = new Label();
         add(BorderLayout.WEST, msg);
         matrice = new Matrice(5);
         setTitle("Determinante");
         setSize(WIDTH, HEIGHT);
         setVisible(true);
      }
    
      public void actionPerformed(ActionEvent e) {
         if (e.getSource() == intestazione.ok) {
            if (creataMatrice) {
               remove(matrice);
               this.setVisible(true);
            }
            int matOrdine;
            try {
               matOrdine = Integer.parseInt(intestazione.txtOrdine.getText());
               matrice = new Matrice(matOrdine);
               add(BorderLayout.CENTER, matrice);
               this.setVisible(true);
               creataMatrice = true;
            } catch (Exception n) {msg.setText(n.toString());}
        } else {
           if (e.getSource() == inferiore.calcola) {
              inferiore.setRisultato(String.valueOf(matrice.getDeterminante()));
           } else {
              matrice.azzeraMatrice();
           }
        }
      }
    }
    Per le modifiche è abbastanza semplice: quando estendi le componenti (Panel sarà JPanel, Button sarà JButton, ecc...) devi solamente modificare i punti in cui aggiungi le componenti (add() diventa getContentPane().add(), remove() diventa getContentPane().remove(), ecc). Poi se sono necessarie altre modifiche lo vedi tu, io non ho provato a portare il codice in Swing. Se hai pazienza, magari fino a domani, posso mettermi al lavoro e postartelo.

    Ciò che è importante è che il metodo actionPerformed() del pulsante controlla e rimuove un'eventuale matrice già visualizzata e ne crea un'altra e la visualizza (E' importante il setVisible(true) alla fine!!!).

    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

  8. #8
    Puoi usare un CardLayout che ti permette di avere più JPanel sovrapposti e visualizzarne uno alla volta.

    Ciauz
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  9. #9
    Utente di HTML.it L'avatar di MOBILUK
    Registrato dal
    Apr 2001
    Messaggi
    225
    @ Leleft > ora guardo il codice cercando di capirlo; se hai nuovi sviluppi posta pure!


    @ Zero-2 > ma non si appesantisce il programma usando più JPanel? :quipy: (...forse mi sbaglio)
    ...credi sia aria quella che stai respirando?

  10. #10
    UN pò si però è uno strumento molto flessibile per alcune applicazioni
    Se a te va bene cancellare i componenti ed inserirne dei nuovi , puoi fare in quel modo
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

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.