Bonjour a tous,
Je suis entrain de finaliser un projet pour ma fac mais je me trouve face a un souci de taille...
Nous sommes obligés d'utiliser le modèle MVC. Vu que je n'arrive pas a le faire fonctionner sur mon projet, j'ai décidé de le tester sur une classe bidon mais cela ne fonctionne pas. Si quelqu'un pouvait me donner une indication car j'ai surement fait une boulette quelque part mais comme ça, de prima-bord, je ne vois pas.
Classe observable :
Code :
- import java.util.Observable;
- public class TestString extends Observable {
- String a;
-
- TestString(){
- super();
- a = "";
- }
-
- void modifyString(String s) {
- a = s;
- setChanged();
- notifyObservers();
- }
-
- String getString() {
- return a;
- }
- }
|
Classe utilisant l'observeur :
Code :
- import java.awt.FlowLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.Observable;
- import java.util.Observer;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.JTextField;
- public class Interface extends JFrame implements Observer, ActionListener{
- TestString a;
- JButton ok;
- JTextField text;
- JLabel resp;
-
- Interface() {
- super();
- a = new TestString();
- build();
- a.addObserver(this);
- }
-
- void build() {
- setSize(400, 100);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setContentPane(buildContentPane());
- }
-
- JPanel buildContentPane() {
- JPanel p = new JPanel();
- p.setLayout(new FlowLayout());
- resp = new JLabel(a.getString());
- ok = new JButton("OK" );
- ok.addActionListener(this);
- ok.setActionCommand("OK" );
- text = new JTextField(10);
-
- p.add(text);
- p.add(ok);
- p.add(resp);
-
- return p;
- }
- @Override
- public void actionPerformed(ActionEvent e) {
- Object source = e.getActionCommand();
- if (source == "OK" ) {
- a.modifyString(text.getText());
- text.setText("" );
- update(a, this);
- }
- }
-
- @Override
- public void update(Observable obs, Object obj) {
- if (obs.hasChanged()) {
- this.repaint();
- }
- }
- }
|
Le code n'étant pas commenté, il s'agit d'une bête fenêtre contenant un text field avec un bouton pour valider, afin de mettre a jour le label.
Merci d'avance pour votre aide.
Message édité par serial_xp le 08-12-2010 à 10:43:09