Visualizzazione dei risultati da 1 a 9 su 9

Discussione: ascoltatore tabbedpane

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    67

    ascoltatore tabbedpane

    Salve ragazzi,

    Avrei bisogno di sapere se esiste un modo per associare un ascoltatore che entri in funzione ogni volta che cambio "scheda" in un componente di tipo JTABBEDPANE

    io ho una classe Java "Gestione" che istanzia il mio jtabbedpane con delle schede in questo modo:

    Classe Gestione.java

    codice:
     
              tabbed = new JTabbedPane();
    
            Scheda1 s1 = new Scheda1();
            pannello1 = s1.Scheda1(argomenti);
    
            Scheda2 s2 = new Scheda2();
            pannello2 = s2.Scheda2(argomenti);
        
             ..............
    
             tabbed.addTab("scheda1", pannello1 );
            tabbed.addTab("scheda2i", pannello2);
    Il problema reale è che devo passare dei dati dalla scheda1 alla scheda2 dopo aver effettuato varie operazioni.

    Scheda1 e Scheda2 sono dei file.java a se stanti e non posso inserirli nello stesso file Gestione.java.....

    Volevo evitare l'utilizzo di un thread apposito per questo scopo... Sapreste aiutarmi? grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    hai l'interfaccia ChangeListener...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    67
    non la conoscevo...sarà percaso che non l''avrò mai utilizzata xD

    do un occhiata...

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    67
    ciao andrea. Ho dato un occhiata al changelistener però ho un problema forse a livello di logica. Vediamo se puoi darmi una mano:

    Ho questa benedetta classe GESTIONE.JAVA dove ho il mio JTabbedPane al quale associo un changelistener.

    Prima però ho già creato le mie schede del JTP e nella seconda scheda ho bisogno che ci sia un valore che viene calcolato nella prima scheda (Eventualmente può essere anche vuoto).

    Il problema consiste nel passarlo. Non riesco a creare o figurarmi in testa uno schema di funzioni che possa soddisfarmi.

    ho provato a fare cosi:

    Classe Gestoine -> ho una variabile globale relativa al dato da passare.

    classe Scheda1 -> public DOUBLE funione (){ return mydouble; }

    classe Gestione -> al cambio scheda richiamo il changelistener dove mi richiama la funzinoe e setta globalmente il valore nella variabile GLOBALE...ma pur sempre all'interno di Gestione.java

    a questo punto vorrei inviare questo valore nella Scheda2 che è gia stata creata.

    Ovviamente quando la istanzio gli passo un valore nullo perchè non è stata ancora effettuata operazione alcuna.

    come posso aggiornare questa variabile nella scheda2 ?

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ho adattato un pezzo di codice che avevo sotto mano, vedi un po' se trovi ispirazione
    codice:
    import javax.swing.*;
    import javax.swing.event.*;
    
    /**
     *
     * @author Andrea
     */
    public class JTabbedPaneAndChangeListener extends JFrame {
        
        private JTabbedPane tabbedPane;
        private JPanel panel1, panel2;
        private JTextField textField1, textField2;
        
        public JTabbedPaneAndChangeListener() {
            super("Testiamo un ChangeListener su JTabbedPane");
            this.setSize(400,400);
            
            tabbedPane = new JTabbedPane();
            
            panel1 = new JPanel();        
            textField1 = new JTextField("Inserisci il tuo testo...");
            panel1.add(textField1);
            
            panel2 = new JPanel();
            textField2 = new JTextField();
            panel2.add(textField2);
            
            tabbedPane.add("Primo pannello", panel1);
            tabbedPane.add("Secondo pannello", panel2);
            
            this.getContentPane().add(tabbedPane);
            
            tabbedPane.addChangeListener(new ChangeListener() {
                public void stateChanged (ChangeEvent ce) {
                    JTabbedPane targetPane = (JTabbedPane)ce.getSource();                
                    
                    if (targetPane.getSelectedIndex()==1) {
                        textField2.setText(textField1.getText().toUpperCase());
                    }
                }
            });
            
            
            
            this.setVisible(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        
        public static void main (String[] args) {
            new JTabbedPaneAndChangeListener();
        }
        
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Questo ovviamente se vuoi che il calcolo avvenga alla selezione della tab di destinazione. Altrimenti nulla vieta di andare a calcolarsi quel che ti serve da qualche altra parte, e settare il valore nella tab: il fatto che non sia selezionata non vuol dire che i componenti in essa contenuta siano morti o che non vi si possa interagire.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    67
    andrea grazie per il codice postato.
    In realtà però il problema forse è stato frainteso.

    i pannelli che riempiono i 2 tabbed sono dichiarati in 2 file diversi e quindi, come vedi dal primo post, la struttura da te postata è diversa da quella mia.

    classe che mi crea il tabbedpane
    -> riempio le schede con oggetti presenti in altre classi.

    il problema è : una volta creati questi 2 oggetti IN 2 CLASSI DIVERSE da quella che mi crea il jtabbedpane, come faccio a passare un dato da uan scheda ad un altra?

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    bhè, non cambia granché: suppongo che le tue tabs provengano da classi che estendono JPanel. Bene, quando crei il tuo JTabbedPane e ci infili dentro le varie tabs, hai anche i riferimenti alle classi stesse e quindi dovresti essere in grado di accedere ai componenti dei panels stessi.

    Pannello1.java
    codice:
    import javax.swing.*;
    ...
    ...
    class Pannello1 extends JPanel {
      private JTextField textField1;
    
      public void updateTextField1(String text) {
        this.textField1.setText(text);
      }
      /* tutti gli altri metodi del caso
        *
        *
      */
    
      public Pannello1() {
        ...
        ...
      }
    }
    Pannello2.java
    codice:
    import javax.swing.*;
    ...
    ...
    class Pannello2 extends JPanel {
      private JTextField textField2;
    
      public void updateTextField2(String text) {
        this.textField2.setText(text);
      }
      /* tutti gli altri metodi del caso
        *
        *
      */
    
      public Pannello2() {
        ...
        ...
      }
    }
    E poi nella classe in cui vai a creare il tuo JTabbedPane
    codice:
    JTabbedPane pane = new JTabbedPane();
    Pannello1 pannello1 = new Pannello1();
    Pannello2 pannello2 = new Pannello2();
    pane.add("Pannello 1", pannello1);
    pane.add("Pannello 2", pannello2);
    
    /*
      * etc etc
    */
    se è più complicato di così, probabilmente stai pensando male all'architettura del tuo prgramma.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    67
    grazie andrea, ho risolto. era un mio errore banale. Sei stato gentilissimo a fornirmi una tua soluzione!

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.