2014-09-15 3 views
0

Je fais un programme, et j'ai 1 JFrame avec JDesktopPane dans ce cadre J'ouvre deux JInternalFrame et je veux passer des données entre ces deux JInternalFrame mais avec JTextField. Je suis juste fait pour transmettre les données mais il ne met pas à jour le JInternalFrame que je veux montrer. Mais si je choisis d'ouvrir à nouveau, montrez-moi les données. S'il vous plaît Aidez-moi! MERCIComment transmettre des données entre deux JInternalFrame?

Dans ce JInternalFrame 2 i envoyé les données à un autre JInternalFrame 1

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    String word = jTxtIDACA.getText(); 
    DatosPersonales frame = new DatosPersonales(); 
    frame.getData(word); 
    frame.setVisible(true); 
    this.getDesktopPane().add(frame); 
    this.dispose(); 

} 

c'est JInternalFrame 1 et j'ai

public void getData(String word){ 
    initComponents(); 
    this.word = word; 
    jTxtIDACA.setText(word); 

}

+1

Envisagez de fournir un [exemple exécutable] (https://stackoverflow.com/help/mcve) whi ch démontre votre problème. Cela entraînera moins de confusion et de meilleures réponses. Vous devriez utiliser une sorte de modèle que les deux cadres peuvent partager et un [Pattern Observateur] (http://www.oodesign.com/observer-pattern.html) pour surveiller les changements à l'intérieur dedans ... – MadProgrammer

+0

Ok, je mets une partie de mon code! – Hector

Répondre

4

L'idée de base est que vous voulez une sorte de modèle, qui détient les données et utilise Observer Pattern pour fournir une notification aux parties intéressées lorsque le modèle change d'une manière ou d'une autre. Les deux JInternalFrames pourraient ensuite partager ce modèle, l'un pourrait le mettre à jour et l'autre pourrait surveiller les modifications (strictement parlant, la relation peut fonctionner dans les deux sens, mais nous allons laisser cela seul pour le moment) ...

Model

maintenant, parce que je ne sais jamais quoi ou comment les gens aimeraient utiliser le modèle, je commence toujours par un interface et fournir une implémentation abstract et une sorte de mise en œuvre par défaut si je me sens c'est nécessaire ....

public interface FruitBowl { 

    public void addFruit(String fruit); 
    public void removeFruit(String fruit); 
    public List<String> getFruit(); 

    public void addFruitBowlListener(FruitBowlListener listener); 
    public void removeFruitBowlListener(FruitBowlListener listener); 

} 

public abstract class AbstractFruitBowl implements FruitBowl { 

    private EventListenerList listenerList; 

    public AbstractFruitBowl() { 
    } 

    protected EventListenerList getEventListenerList() { 
     if (listenerList == null) { 
      listenerList = new EventListenerList(); 
     } 
     return listenerList; 
    } 

    @Override 
    public void addFruitBowlListener(FruitBowlListener listener) { 
     getEventListenerList().add(FruitBowlListener.class, listener); 
    } 

    @Override 
    public void removeFruitBowlListener(FruitBowlListener listener) { 
     getEventListenerList().remove(FruitBowlListener.class, listener); 
    } 

    protected void fireFruitAdded(String fruit) { 
     FruitBowlListener[] listeners = getEventListenerList().getListeners(FruitBowlListener.class); 
     if (listeners.length > 0) { 
      FruitBowlEvent evt = new FruitBowlEvent(this, fruit); 
      for (FruitBowlListener listener : listeners) { 
       listener.fruitAdded(evt); 
      } 
     } 
    } 

    protected void fireFruitRemoved(String fruit) { 
     FruitBowlListener[] listeners = getEventListenerList().getListeners(FruitBowlListener.class); 
     if (listeners.length > 0) { 
      FruitBowlEvent evt = new FruitBowlEvent(this, fruit); 
      for (FruitBowlListener listener : listeners) { 
       listener.fruitRemoved(evt); 
      } 
     } 
    } 
} 

public class DefaultFruitBowl extends AbstractFruitBowl { 

    private List<String> fruits; 

    public DefaultFruitBowl() { 
     fruits = new ArrayList<>(25); 
    } 

    @Override 
    public void addFruit(String fruit) { 
     fruits.add(fruit); 
     fireFruitAdded(fruit); 
    } 

    @Override 
    public void removeFruit(String fruit) { 
     fruits.remove(fruit); 
     fireFruitRemoved(fruit); 
    } 

    @Override 
    public List<String> getFruit() { 
     return Collections.unmodifiableList(fruits); 
    } 

} 

Ensuite, nous devons définir le contrat de modèle d'observateur par l'utilisation des auditeurs ...

public class FruitBowlEvent extends EventObject { 
    private String fruit; 

    public FruitBowlEvent(FruitBowl fruitBowl, String fruit) { 
     super(fruitBowl); 
     this.fruit = fruit; 
    } 

    public FruitBowl getFruitBowl() { 
     return (FruitBowl)getSource(); 
    } 

    public String getFruit() { 
     return fruit; 
    } 

} 

public interface FruitBowlListener extends EventListener { 

    public void fruitAdded(FruitBowlEvent evt); 
    public void fruitRemoved(FruitBowlEvent evt); 

} 

Ensuite, nous définissons l'interface utilisateur ...

public class TestModel { 

    public static void main(String[] args) { 
     new TestModel(); 
    } 

    public TestModel() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       FruitBowl fb = new DefaultFruitBowl(); 

       JDesktopPane dp = new JDesktopPane() { 
        @Override 
        public Dimension getPreferredSize() { 
         return new Dimension(400, 200); 
        } 
       }; 
       JInternalFrame manager = new JInternalFrame("Fruit Bowl Manager", true, true, true, true); 
       manager.add(new FruitBowelManagerPane(fb)); 
       manager.setVisible(true); 
       manager.setBounds(0, 0, 200, 200); 

       JInternalFrame monitor = new JInternalFrame("Fruit Bowl Monitor", true, true, true, true); 
       monitor.add(new FruitBowelMonitorPane(fb)); 
       monitor.setVisible(true); 
       monitor.setBounds(200, 0, 200, 200); 

       dp.add(manager); 
       dp.add(monitor); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(dp); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public abstract class AbstractFruitPane extends JPanel { 

     private FruitBowl fruitBowl; 

     public AbstractFruitPane(FruitBowl fruitBowl) { 
      this.fruitBowl = fruitBowl; 
     } 

     public FruitBowl getFruitBowl() { 
      return fruitBowl; 
     } 

    } 

    public class FruitBowelManagerPane extends AbstractFruitPane { 

     private String[] fruits = {"Banana", "Strewberry", "Pear", "Peach", "Orange"}; 

     private JButton giver; 
     private JButton taker; 

     public FruitBowelManagerPane(FruitBowl fruitBowl) { 
      super(fruitBowl); 
      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridwidth = 1; 

      giver = new JButton("Add fruit"); 
      taker = new JButton("Remove fruit"); 
      taker.setEnabled(false); 

      giver.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        String fruit = fruits[(int)(fruits.length * Math.random())]; 
        getFruitBowl().addFruit(fruit); 
        taker.setEnabled(true); 
       } 
      }); 
      taker.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        List<String> fruits = getFruitBowl().getFruit(); 
        String eat = fruits.get((int)(fruits.size() * Math.random())); 
        getFruitBowl().removeFruit(eat); 
        if (getFruitBowl().getFruit().isEmpty()) { 
         taker.setEnabled(false); 
        } 
       } 
      }); 

      add(giver, gbc); 
      add(taker, gbc); 
     } 

    } 

    public class FruitBowelMonitorPane extends AbstractFruitPane { 

     private JLabel label; 

     public FruitBowelMonitorPane(FruitBowl fruitBowl) { 
      super(fruitBowl); 
      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 

      label = new JLabel("I'm watching you..."); 
      add(label); 

      fruitBowl.addFruitBowlListener(new FruitBowlListener() { 
       @Override 
       public void fruitAdded(FruitBowlEvent evt) { 
        label.setText("You added " + evt.getFruit()); 
       } 

       @Override 
       public void fruitRemoved(FruitBowlEvent evt) { 
        if (getFruitBowl().getFruit().isEmpty()) { 
         label.setText("You ate all the fruit!"); 
        } else { 
         label.setText("You ate my " + evt.getFruit()); 
        } 
       } 
      }); 

     } 

    } 

} 

Mis à jour par exemple combiné

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.EventListener; 
import java.util.EventObject; 
import java.util.List; 
import javax.swing.JButton; 
import javax.swing.JDesktopPane; 
import javax.swing.JFrame; 
import javax.swing.JInternalFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.event.EventListenerList; 

public class TestModel { 

    public static void main(String[] args) { 
     new TestModel(); 
    } 

    public TestModel() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       FruitBowl fb = new DefaultFruitBowl(); 

       JDesktopPane dp = new JDesktopPane() { 
        @Override 
        public Dimension getPreferredSize() { 
         return new Dimension(400, 200); 
        } 
       }; 
       JInternalFrame manager = new JInternalFrame("Fruit Bowl Manager", true, true, true, true); 
       manager.add(new FruitBowelManagerPane(fb)); 
       manager.setVisible(true); 
       manager.setBounds(0, 0, 200, 200); 

       JInternalFrame monitor = new JInternalFrame("Fruit Bowl Monitor", true, true, true, true); 
       monitor.add(new FruitBowelMonitorPane(fb)); 
       monitor.setVisible(true); 
       monitor.setBounds(200, 0, 200, 200); 

       dp.add(manager); 
       dp.add(monitor); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(dp); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public abstract class AbstractFruitPane extends JPanel { 

     private FruitBowl fruitBowl; 

     public AbstractFruitPane(FruitBowl fruitBowl) { 
      this.fruitBowl = fruitBowl; 
     } 

     public FruitBowl getFruitBowl() { 
      return fruitBowl; 
     } 

    } 

    public class FruitBowelManagerPane extends AbstractFruitPane { 

     private String[] fruits = {"Banana", "Strewberry", "Pear", "Peach", "Orange"}; 

     private JButton giver; 
     private JButton taker; 

     public FruitBowelManagerPane(FruitBowl fruitBowl) { 
      super(fruitBowl); 
      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridwidth = 1; 

      giver = new JButton("Add fruit"); 
      taker = new JButton("Remove fruit"); 
      taker.setEnabled(false); 

      giver.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        String fruit = fruits[(int) (fruits.length * Math.random())]; 
        getFruitBowl().addFruit(fruit); 
        taker.setEnabled(true); 
       } 
      }); 
      taker.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        List<String> fruits = getFruitBowl().getFruit(); 
        String eat = fruits.get((int) (fruits.size() * Math.random())); 
        getFruitBowl().removeFruit(eat); 
        if (getFruitBowl().getFruit().isEmpty()) { 
         taker.setEnabled(false); 
        } 
       } 
      }); 

      add(giver, gbc); 
      add(taker, gbc); 
     } 

    } 

    public class FruitBowelMonitorPane extends AbstractFruitPane { 

     private JLabel label; 

     public FruitBowelMonitorPane(FruitBowl fruitBowl) { 
      super(fruitBowl); 
      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 

      label = new JLabel("I'm watching you..."); 
      add(label); 

      fruitBowl.addFruitBowlListener(new FruitBowlListener() { 
       @Override 
       public void fruitAdded(FruitBowlEvent evt) { 
        label.setText("You added " + evt.getFruit()); 
       } 

       @Override 
       public void fruitRemoved(FruitBowlEvent evt) { 
        if (getFruitBowl().getFruit().isEmpty()) { 
         label.setText("You ate all the fruit!"); 
        } else { 
         label.setText("You ate my " + evt.getFruit()); 
        } 
       } 
      }); 

     } 

    } 

    public class FruitBowlEvent extends EventObject { 

     private String fruit; 

     public FruitBowlEvent(FruitBowl fruitBowl, String fruit) { 
      super(fruitBowl); 
      this.fruit = fruit; 
     } 

     public FruitBowl getFruitBowl() { 
      return (FruitBowl) getSource(); 
     } 

     public String getFruit() { 
      return fruit; 
     } 

    } 

    public interface FruitBowlListener extends EventListener { 
     public void fruitAdded(FruitBowlEvent evt); 
     public void fruitRemoved(FruitBowlEvent evt); 
    } 

    public interface FruitBowl { 
     public void addFruit(String fruit); 
     public void removeFruit(String fruit); 
     public List<String> getFruit(); 
     public void addFruitBowlListener(FruitBowlListener listener); 
     public void removeFruitBowlListener(FruitBowlListener listener); 
    } 

    public abstract class AbstractFruitBowl implements FruitBowl { 

     private EventListenerList listenerList; 

     public AbstractFruitBowl() { 
     } 

     protected EventListenerList getEventListenerList() { 
      if (listenerList == null) { 
       listenerList = new EventListenerList(); 
      } 
      return listenerList; 
     } 

     @Override 
     public void addFruitBowlListener(FruitBowlListener listener) { 
      getEventListenerList().add(FruitBowlListener.class, listener); 
     } 

     @Override 
     public void removeFruitBowlListener(FruitBowlListener listener) { 
      getEventListenerList().remove(FruitBowlListener.class, listener); 
     } 

     protected void fireFruitAdded(String fruit) { 
      FruitBowlListener[] listeners = getEventListenerList().getListeners(FruitBowlListener.class); 
      if (listeners.length > 0) { 
       FruitBowlEvent evt = new FruitBowlEvent(this, fruit); 
       for (FruitBowlListener listener : listeners) { 
        listener.fruitAdded(evt); 
       } 
      } 
     } 

     protected void fireFruitRemoved(String fruit) { 
      FruitBowlListener[] listeners = getEventListenerList().getListeners(FruitBowlListener.class); 
      if (listeners.length > 0) { 
       FruitBowlEvent evt = new FruitBowlEvent(this, fruit); 
       for (FruitBowlListener listener : listeners) { 
        listener.fruitRemoved(evt); 
       } 
      } 
     } 
    } 

    public class DefaultFruitBowl extends AbstractFruitBowl { 

     private List<String> fruits; 

     public DefaultFruitBowl() { 
      fruits = new ArrayList<>(25); 
     } 

     @Override 
     public void addFruit(String fruit) { 
      fruits.add(fruit); 
      fireFruitAdded(fruit); 
     } 

     @Override 
     public void removeFruit(String fruit) { 
      fruits.remove(fruit); 
      fireFruitRemoved(fruit); 
     } 

     @Override 
     public List<String> getFruit() { 
      return Collections.unmodifiableList(fruits); 
     } 

    } 
} 
+0

Hey, je ne vous comprends pas, comment postuler! – Hector

+0

Construire l'exemple, voir comment accrocher et répliquer – MadProgrammer

+0

J'ai essayé de construire l'exemple mais j'ai quelques erreurs. – Hector

Questions connexes