IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Question pour une IHM


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut Question pour une IHM
    Voici mon problème, j'ai réalisé une IHM en java pour contrôler des servomoteurs (via une carte électronique). En gros c'est une fenêtre avec 20 sliders pour choisir les positions.

    Mon soft fonctionne mais voilà, je ne suis pas très à l'aise avec java et j'ai programmé "a l'arrache".

    j'ai dupliqué ce code 20 fois pour faire mes sliders:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    JComponent panelServo1 = new JPanel();
    panelServo1.setLayout(new BoxLayout(panelServo1, BoxLayout.Y_AXIS));
    sliderServo1.setPaintTicks(false);
    sliderServo1.setMajorTickSpacing(30);
    sliderServo1.setPaintLabels( true );
    sliderServo1.putClientProperty( "JSlider.isFilled", Boolean.TRUE ); 
    sliderServo1.addChangeListener(this);
    ValServo1 = new JTextField(String.valueOf(valeurServo1)); 
    ValServo1.addFocusListener(this);
    ValServo1.addKeyListener(this);  		
    InvServo1 = new JCheckBox("inv");
    InvServo1.addActionListener(this);
    Comment puis je faire pour factoriser mon code proprement?
    En faite, je souhaiterai faire une classe qui définis mon slider et l'instancier 20 fois mais je ne sais pas comment

    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    vous créez une classe qui étends JPanel et dans son construteur crée les trois composants, expose leur valeur via des trucs du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int getValue() {return slider.getValue();}
    boolean isInverted() {return checkbox.isChecked();}
    Pour les listener, faut voir leur code, mais l'idéal c'est que la classe soit le listener qui traite les évènement directement

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut
    Merci de ces explications mais j'ai toujours des problèmes
    J'ai du mal avec les concepts d'héritages entre la classe JFrame et ces composants (je pense que mon problème est là).

    je me suis fait un exemple simplifié pour comprendre:

    Ma méthode main qui créer un objet de type MyFrame
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyFrame fenetre = new MyFrame();
    ma classe MyFrame
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import javax.swing.*;
     
    public class MyFrame extends JFrame{
    	public MyFrame(){
            this.setTitle("test");
            this.setSize(300, 300);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		SliderPerso mySlider = new SliderPerso();
    		add(mySlider);
    	    this.setVisible(true);
    	}
    }
    Ma classe SliderPerso ou je définis mon slider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import javax.swing.JSlider;
     
    public class SliderPerso extends JSlider{
    	public SliderPerso(){
    		new JSlider(JSlider.VERTICAL, -90, 90, 0);
    		this.setPaintTicks(false);
    		this.setMajorTickSpacing(30);
    		this.setPaintLabels( true );
    	}
    }
    Voila, ce code compile et affiche un slider mais il n'est pas vertical!!

    Où est mon erreur?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	public SliderPerso(){
    		new JSlider(JSlider.VERTICAL, -90, 90, 0);
    Là, vous créez un deuxième slider (cf le "new") vertical dont vous ne faites rien. Si vous voulez invoquer le constructeur parent avec des paramètre particulier, c'est super qu'il faut utiliser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	public SliderPerso(){
    		super(JSlider.VERTICAL, -90, 90, 0);

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut
    Effectivement avec la méthode super() ça marche mieux!!
    Mais j'ai encore des questions car je n'arrive toujours pas a créer plusieurs composants dans la même classe.

    Déjà, ma classe SliderPerso étend JSlider, je ne suis pas arrivé avec JPanel!!

    Comment peut-on ajouter un JCheckBox par exemple?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class SliderPerso extends JSlider{
    	public SliderPerso(){
    		super(JSlider.VERTICAL, -90, 90, 0);
    		this.setPaintTicks(false);
    		this.setMajorTickSpacing(30);
    		this.setPaintLabels( true );
    	}
    }
    Merci d'avance

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Tu l'ajoutes dans le JPanel, à coté de ton Slider

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut
    Tu l'ajoutes dans le JPanel, à coté de ton Slider
    Oui ça je le sais, le Pb c'est que je n'arrive pas à le faire

    voila grosso modo le code que je souhaite mettre dans une classe SliderPerso
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    JSlider mySlider = new JSlider(JSlider.VERTICAL, -90, 90, 0);
    mySlider.setPaintTicks(false);
    mySlider.setMajorTickSpacing(30);
    mySlider.setPaintLabels( true );
     
    JTextField ValServo = new JTextField(0);
     
    JCheckBox InvServo1 = new JCheckBox("inv"); 
     
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));	
    panel.add(mySlider);
    panel.add(ValServo);
    panel.add(InvServo1);
     
    TitledBorder titleServo1 = new TitledBorder("Servo 1");
    panel.setBorder(titleServo1);
    Le but de créer mes composants SliderPerso dans ma classe graphique (qui étend JFrame)

    donc mes questions sont:
    - Ma classe SliderPerso doit étendre quelle autre classe (je pense que c'est ma classe graphique me je suis pas sûr)?
    - Comment déclarer plusieurs composants dans le constructeur de SliderPerso?

    Merci de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quelques questions pour une réorientation
    Par Lloyd dans le forum Etudes
    Réponses: 2
    Dernier message: 05/03/2007, 21h30
  2. Réponses: 16
    Dernier message: 05/08/2006, 11h07
  3. Petite question sur une IHM
    Par beb30 dans le forum MFC
    Réponses: 12
    Dernier message: 10/04/2006, 15h19
  4. [2D] Mini-projet : question pour une interface graphique
    Par kitsune dans le forum Développement 2D, 3D et Jeux
    Réponses: 15
    Dernier message: 10/03/2006, 14h59
  5. Quel langage pour une IHM multimedia ?
    Par furet dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 19/11/2005, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo