editer des composants a partir d'une autres classe

ramzi ramzi
editer des composants a partir d'une autres classe

salut a tous

est ce qu'il est possible de manipuler et d'editer les proprietes des composant s d'une interface graphique (jlabel , jpanel,jbutton.....) au travers une autre classe extensible de la classe decrivant ces composants ainsi qu'ajouter d'autres composants a cette interface

c a dire :
j'ai une classe qui decrit l'interface graphique (les composants et leur dispositions...)
par exemple mors d'une appuit sur un bouton de cette interface , celui ci appel une classe qui fait des traitement au autres composants citue dans l'interface et ajoutes d'autres

j'ai essayee de cherchee dans des exemples mais je ne trouve rien
est ce possible de faire ca ou nom et comment (idee)

je fait un essai de modifier le continue d'un textarea avec deux methodes decrites dans la classe de l'interface graphique ( String get() et set(string ..) ) en les appelant dans une autre classe mais sa me paraittre une mauvaise idee...
merci

nasix

Salut,

Si vous n'avez toujours pas trouvé de solution à votre problème je vous propose ce qui suit :

Dans votre classe fenêtre (Frame), vous mettez les contrôles comme des attributs, comme ça vous pourrez créer des méthodes (dans la même classe mais de portée publique) qui agissent sur les contrôles, et vous appelez ses méthodes de l'extérieur, voici un exemple illustratif :

class myFrame extends JFrame {
JButton b1;

public setButtonText (String titre){
b1.setText(titre);
}
}

class AutreClass {
maFonction (){
JFrame maFenetre = new JFrame();
maFenetre.setButtonText("Ok");
}
}

class Main{
public static void main(String [] args){
AutreClass ac = new AutreClass();
ac.maFonction();
}
}

Je n'ai pas testé ce code, je suis désolé si vous trouvez des erreurs, mon but est d'illustrer la solution conceptuelle.

Bonne chance.

Niroken

Bonjour,

Pour éditer des composants d'une interface graphique à partir
d'une autre classe, tu peux modifier les composants de ton
IHM dans une autre classe comme ceci :

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class TestJFrame1 extends JFrame implements ActionListener{
    public JButton mButtonAction1;
    public JButton mButtonAction2;
    public JTextArea mTextArea;
    
    public TestJFrame1 () {
        mButtonAction1 = new JButton();
        mButtonAction2 = new JButton();
        mTextArea = new JTextArea();
        
        mButtonAction1.addActionListener(this);
        mButtonAction2.addActionListener(this);
        
        /*Positionnement des composants : à implémenter*/
    }
    
    public void actionPerformed(ActionEvent pArg0) {
        if (pArg0.getSource() == mButtonAction1) {
            TraitementMetier vTraitementMetier = new TraitementMetier(this);
            vTraitementMetier.action1();
        } else if (pArg0.getSource() == mButtonAction2) {
            TraitementMetier vTraitementMetier = new TraitementMetier(this);
            vTraitementMetier.action2();
        }
    }
}

class TraitementMetier {
    
    TestJFrame1 mTestJFrame;
    
    public TraitementMetier (TestJFrame1 pTestJFrame) {
        mTestJFrame = pTestJFrame;
    }
    
    public void action1() {
        mTestJFrame.mTextArea.setText("un texte 1");
        mTestJFrame.mButtonAction1.setBackground(Color.BLACK);
    }
    
    public void action2() {
        mTestJFrame.mTextArea.setText("un texte 2");
        mTestJFrame.mButtonAction2.setBackground(Color.RED);
    }
}

Le soucis avec cette implémentation c'est que la "partie" traitementMetier manipule des objets graphiques et que ce n'est normalement pas son role; du coup je te conseillerais cette implémentation :

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class TestJFrame2 extends JFrame {
    public JButton mButtonAction1;
    public JButton mButtonAction2;
    public JTextArea mTextArea;
        
    public TestJFrame2 () {
        mButtonAction1 = new JButton();
        mButtonAction2 = new JButton();
        mTextArea = new JTextArea();
                
        mButtonAction1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent pArg0) {
                TraitementMetier vTraitementMetier = new TraitementMetier();
                vTraitementMetier.action1();
                
                mButtonAction1.setBackground(vTraitementMetier.mColorTmp);
                mTextArea.setText(vTraitementMetier.mTextTmp);
            }
        });
        mButtonAction2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent pArg0) {
                TraitementMetier vTraitementMetier = new TraitementMetier();
                vTraitementMetier.action2();
                
                mButtonAction2.setBackground(vTraitementMetier.mColorTmp);
                mTextArea.setText(vTraitementMetier.mTextTmp);
            }
        });
        
        /*Positionnement des composants : à implémenter*/
    }
    
}

class TraitementMetier {
    
    public String mTextTmp;
    public Color mColorTmp;
    
    public void action1() {
        mTextTmp = "un texte 1";
        mColorTmp = Color.BLACK;
    }
    
    public void action2() {
        mTextTmp = "un texte 2";
        mColorTmp = Color.RED;
    }
    
}

J'espère que ca peut t'aider.

Bonne chance,
Niroken