WindowsBuilder swing java

Fermé
Streamooc Messages postés 79 Date d'inscription samedi 17 juin 2017 Statut Membre Dernière intervention 8 février 2023 - Modifié le 21 juin 2017 à 08:50
Streamooc Messages postés 79 Date d'inscription samedi 17 juin 2017 Statut Membre Dernière intervention 8 février 2023 - 2 juil. 2017 à 04:13
Bonjour,
Bonjour,

J'ai créé deux boutons 'Run' et 'Step'.Je veux qu'en cliquant sur 'Run' un fil rouge défile et ensuite en cliquant sur 'Step' un fil bleu défile.Mais là c'est seulement le fil bleu qui apparaît et défile quand je clique sur 'Run'.Le problème que je rencontre c'est que je n'arrive pas à faire apparaître les deux boutons et aussi enchaîner les actions.J'ai besoin d'aide si quelqu'un pourra m'aider.Si quelqu'un pourra me fournir des liens pour que je puisse maîtriser Swing j'en serai vraiment bien.Ci dessous les codes:


public class FilDecrochage extends Component{

     private static final long serialVersionUID = 1L;

     private int posX;
     private int posY;

     public FilDecrochage(int posX, int posY) {
         this.posX = posX;
         this.posY = posY;
     }

     @Override
     public void paint(Graphics g) {
         g.setColor(Color.red);
         g.fillRect(posX, posY, 50, 50);
     }

     public void incrX() {
         posX++;
     }

     public void incrY() {
         posY++;
     }

 }


public class LiaisonUraTap extends Component{
 private static final long serialVersionUID = 1L;

    private int posX;
    private int posY;
    public  LiaisonUraTap(int posX, int posY) {
      this.posX = posX;
         this.posY = posY;
     
    }
    

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.blue);
        g.fillRect(posX, posY, 50, 50);
    }

    public void incrUraX() {
        posX++;
    }

    public void incrUraY() {
        posY++;
    }

}



public class FenetrePrincipale extends JFrame {
 private static final long serialVersionUID = 1L;

    public FenetrePrincipale() {
        setSize(500, 516);
        setLocationByPlatform(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

              FilDecrochage fil = new FilDecrochage(0, 0);
        add(fil, BorderLayout.CENTER);
        
        LiaisonUraTap uraTap1 =new LiaisonUraTap(170, 70);
        
        add(uraTap1,BorderLayout.CENTER);

        JButton button = new JButton("Run");
        
        button.addActionListener(e -> go(fil));
        add(button, BorderLayout.SOUTH);

        JButton buttonUra=new JButton("Step");
        button.addActionListener(e -> goUraTap(uraTap1));
        add(buttonUra, BorderLayout.EAST);
    }

    
    private void go(FilDecrochage fil) {
        new SwingWorker<Void, Void>() {
            @Override
            protected Void doInBackground() {
                for (int i = 0; i < 270; i++) { //270:Distance que le fil doit parcourir avant de s'arrêter
                    fil.incrX();
                    fil.incrY();
                    fil.repaint();
                    sleep(10);
                }
                return null;
            }
        }.execute();
    }

   
    
    
    /////////////////////////////
    

    private void goUraTap(LiaisonUraTap uraTap1) {
        new SwingWorker<Void, Void>() {
            @Override
            protected Void doInBackground() {
                for (int i = 0; i < 270; i++) { //270:Distance que le fil doit parcourir avant de s'arrêter
                    uraTap1.incrUraX();
                    uraTap1.incrUraY();
                    uraTap1.repaint();
                    sleep(10);
                }
                return null;
            }
        }.execute();
    }

    
   //////////////////////////////////////////
    private static void sleep(long ms) {
        try {
            Thread.sleep(ms);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }   

}



public class ClassePrincipale {
 public static void main(String[] args) {
        FenetrePrincipale fenetrePrincipale = new FenetrePrincipale();
        fenetrePrincipale.setVisible(true);
    }
}
A voir également:

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
21 juin 2017 à 21:07
Bonjour,

Tu ne peux pas mettre deux composants dans une même "case" du BorderLayout, donc
add(fil, BorderLayout.CENTER);
et
add(uraTap1,BorderLayout.CENTER)
rentrent en conflit et seul le dernier reste.

Une manière de faire, c'est de mettre un JPanel au centre pour y mettre tes deux composants mais sans le BorderLayout.

Exemple :

JPanel panel = new JPanel();
panel.setLayout(null);
fil.setSize(1000, 1000);
panel.add(fil);
uraTap1.setSize(1000, 1000);
panel.add(uraTap1);
add(panel, BorderLayout.CENTER);

Remarque : il y a une petite erreur sur
button.addActionListener(e -> goUraTap(uraTap1));
car c'est buttonUra qui devrait être utilisé ici...
0
Streamooc Messages postés 79 Date d'inscription samedi 17 juin 2017 Statut Membre Dernière intervention 8 février 2023
23 juin 2017 à 16:47
Bonjour merci KX ça marche bien merci beaucoup.
L'autre problème auquel je suis soumis maintenant c'est que j'aimerais que les deux fils 'rouge' et 'bleu' ne s'affichent pas avant le click sur les boutons c'est-à-dire que lorsque je compile le programme j'ai seulement les boutons qui s'affichent et dès que je clique sur 'Run' le fil rouge apparaît et défile et ensuite quand je clique sur 'Step' le fil bleu apparaît et défile.Si vous pouvez encore m'aider s'il vous plaît
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > Streamooc Messages postés 79 Date d'inscription samedi 17 juin 2017 Statut Membre Dernière intervention 8 février 2023
23 juin 2017 à 18:20
Tu peux faire setVisible(false) sur fil et uraTap1 à l'initialisation et faire setVisible(true) quand tu appuies sur le bouton.
0
Streamooc Messages postés 79 Date d'inscription samedi 17 juin 2017 Statut Membre Dernière intervention 8 février 2023 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
Modifié le 27 juin 2017 à 12:05
Bonjour
Merci beaucoup KX ça marche

Je veux utiliser peu de boutons dans mon programme
Dans un premier instant manuellement .Au fait je veux utiliser uniquement le bouton 'Run' et exécuter les tâches l'une après l'autre c'est - à dire je veux qu'en cliquant sur 'Run' le fil rouge défile.Ensuite quand je clique à nouveau sur 'Run' un message 'Sélectionnez un IT ' s'affiche et enfin lorsque je clique sur 'Run' le fil rouge défile
Dans un second instant automatiser c'est à dire une fois qu'en cliquant sur 'Run' tout se fait sans que je ne clique à nouveau
J'ai essayé pour la partie manuelle mais ça ne marche pas
J'ai encore besoin d'aide s'il vous plait

//Dans la classe principale
public class FenetrePrincipale extends JFrame {
   
 public FenetrePrincipale(){
  //button_1 est le bouton "Run"
        button_1.addActionListener(e -> go(fil));
        button_1.addActionListener(e -> goIt());
        button_1.addActionListener(e -> goUraTap(uraTap1));


//Cette partie permet de sélectionner un IT
 //Combobox:La barre des intervalles de temps
  
        String[] messageStrings ={"0","1","2","3"};
      JComboBox cmbMessageList = new JComboBox(messageStrings);
      cmbMessageList.setBounds(474, 62, 37, 20);
      panel.add(cmbMessageList);
      
      
      JLabel labelIt = new JLabel("");
      cmbMessageList.setSelectedIndex(1);
      labelIt.setBounds(521, 65, 230, 14);
      panel.add(labelIt);
      cmbMessageList.addActionListener(new ActionListener() {
   
   @Override
   public void actionPerformed(ActionEvent e) {
    if (e.getSource()== cmbMessageList) {
     
     JComboBox cb = (JComboBox)e.getSource();
     String msg = (String) cb.getSelectedItem();
     
     switch (msg) { //Messages renvoyés après la sélection d'un IT
     
     case "0":labelIt.setText("IT 0 est réservé pour la synchronisation");
     break;
     
     case "1":labelIt.setText("Sélection de IT 1");
      break;
      
     case "2":labelIt.setText("Sélection de l'IT2");
     break;
     case "3":labelIt.setText("Sélection de l'IT3");
     break;
     
  
     }
    
    }
   }
      });
      }


    private void go(FilDecrochage fil) {
        new SwingWorker<Void, Void>() {
            @Override
            protected Void doInBackground() {
                for (int i = 0; i < 270; i++) { //270:Distance que le fil doit parcourir avant de s'arrêter
                    fil.incrX();
                    //fil.incrY();
                    fil.repaint();
                    sleep(10);
                }
                return null;
            }
        }.execute();
    }

    
   /**


* Méthode de 'la sélection d'IT'

*/
public void goIt(){
    JOptionPane.showMessageDialog(null, "Sélectionner un IT");
   }
    
    
    /////////////////////////////
    

    private void goUraTap(LiaisonUraTap uraTap1) {
        new SwingWorker<Void, Void>() {
            @Override
            protected Void doInBackground() {
                for (int i = 0; i < 270; i++) { //270:Distance que le fil doit parcourir avant de s'arrêter
                    //uraTap1.incrUraX();
                    uraTap1.incrUraY();
                    uraTap1.repaint();
                    sleep(10);
                }
               return null;
            }
        }.execute();
    }

    
   //////////////////////////////////////////
    private static void sleep(long ms) {
        try {
            Thread.sleep(ms);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }   
        
}

public class FilDecrochage extends Component{
 private static final long serialVersionUID = 1L;

    private int posX;
    private int posY;

    public FilDecrochage(int posX, int posY) {
        this.posX = posX;
        this.posY = posY;
    }

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.red);
        g.fillRect(posX, posY, 50, 50);
    }

    public void incrX() {
        posX++;
    }

    public void incrY() {
        posY++;
    }


}

public class LiaisonUraTap extends Component{
 private static final long serialVersionUID = 1L;

    private int posX;
    private int posY;
    public  LiaisonUraTap(int posX, int posY) {
      this.posX = posX;
         this.posY = posY;
     
    }
    

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.red);
        g.fillRect(posX, posY, 50, 50);
    }

    public void incrUraX() {
        posX++;
    }

    public void incrUraY() {
        posY++;
    }

}

public class ClassePrincipale {
 public static void main(String[] args) {
        FenetrePrincipale fenetrePrincipale = new FenetrePrincipale();
        fenetrePrincipale.setVisible(true);
    }
}
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015 > Streamooc Messages postés 79 Date d'inscription samedi 17 juin 2017 Statut Membre Dernière intervention 8 février 2023
27 juin 2017 à 12:18
Il te manque du code dans FenetrePrincipale... où sont déclarés et initialisés button_1, panel, fil et uraTap1 ?

Moi je testes ton code et y a rien qui s'affiche...

Remarque :
        cmbMessageList.addActionListener(e -> {
            if (e.getSource() == cmbMessageList) {

                JComboBox cb = (JComboBox) e.getSource();
                String msg = (String) cb.getSelectedItem();

                switch (msg) {

Dans la mesure où le listener n'est ajouté qu'à un seul composant, il est impossible que la source soit autre chose que cmbMessageList.

Tu peux faire directement :
        cmbMessageList.addActionListener(e -> {
            switch ((String) cmbMessageList.getSelectedItem()) {
0
Streamooc Messages postés 79 Date d'inscription samedi 17 juin 2017 Statut Membre Dernière intervention 8 février 2023 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
Modifié le 27 juin 2017 à 15:07
Bonjour voici le code de la classe FenetrePrincipale
public class FenetrePrincipale extends JFrame {
 private static final long serialVersionUID = 1L;

    public FenetrePrincipale() {
        setSize(433, 516);
        setLocationByPlatform(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        JPanel panel =new JPanel();
        panel.setLayout(null);
        
        FilDecrochage fil = new FilDecrochage(40, 100);
        fil.setLocation(0, -50);
        fil.setSize(1000,774);
        panel.add(fil);
        
//        LiaisonUraTap uraTap1 =new LiaisonUraTap(170, 70);
//        uraTap1.setSize(1000,1000);
//        panel.add(uraTap1);
        getContentPane().add(panel,BorderLayout.CENTER);
        
        JPanel panel_1 = new JPanel();
        panel_1.setBounds(22, 11, 347, 429);
        panel.add(panel_1);
        
        JButton button_1 = new JButton("");
        button_1.setIcon(new ImageIcon(FenetrePrincipale.class.getResource("/tapwindowsbuilder/ressources/run.png.png")));
        
        JButton button_2 = new JButton("");
        button_2.setIcon(new ImageIcon(FenetrePrincipale.class.getResource("/tapwindowsbuilder/ressources/step.png")));
        GroupLayout gl_panel_1 = new GroupLayout(panel_1);
        gl_panel_1.setHorizontalGroup(
         gl_panel_1.createParallelGroup(Alignment.LEADING)
          .addGroup(gl_panel_1.createSequentialGroup()
           .addGap(83)
           .addComponent(button_1)
           .addGap(40)
           .addComponent(button_2)
           .addContainerGap(70, Short.MAX_VALUE))
        );
        gl_panel_1.setVerticalGroup(
         gl_panel_1.createParallelGroup(Alignment.LEADING)
          .addGroup(Alignment.TRAILING, gl_panel_1.createSequentialGroup()
           .addContainerGap(377, Short.MAX_VALUE)
           .addGroup(gl_panel_1.createParallelGroup(Alignment.TRAILING)
            .addComponent(button_2)
            .addComponent(button_1))
           .addContainerGap())
        );
        panel_1.setLayout(gl_panel_1);
       
        //JButton button = new JButton("Run");
        button_1.addActionListener(e -> go(fil));
        button_1.addActionListener(e -> goIt());
        button_1.addActionListener(e -> goUraTap(uraTap1));
        
       // JButton buttonUra=new JButton("Step");
        //button_2.addActionListener(e -> goUraTap(uraTap1));
        

      //Combobox:La barre des intervalles de temps
  
        String[] messageStrings ={"0","1","2","3"};
      JComboBox cmbMessageList = new JComboBox(messageStrings);
      cmbMessageList.setBounds(474, 62, 37, 20);
      panel.add(cmbMessageList);
      
      
      JLabel labelIt = new JLabel("");
      cmbMessageList.setSelectedIndex(1);
      labelIt.setBounds(521, 65, 230, 14);
      panel.add(labelIt);
      cmbMessageList.addActionListener(new ActionListener() {
   
   @Override
   public void actionPerformed(ActionEvent e) {
    if (e.getSource()== cmbMessageList) {
     
     JComboBox cb = (JComboBox)e.getSource();
     String msg = (String) cb.getSelectedItem();
     
     switch (msg) { //Messages renvoyés après la sélection d'un IT
     
     case "0":labelIt.setText("IT 0 est réservé pour la synchronisation");
     break;
     
     case "1":labelIt.setText("Sélection de IT 1");
      break;
      
     case "2":labelIt.setText("Sélection de l'IT2");
     break;
     case "3":labelIt.setText("Sélection de l'IT3");
     break;
     
  
     }
    
    }
   }
      });
      
     
 
        
        
    }

    
    private void go(FilDecrochage fil) {
        new SwingWorker<Void, Void>() {
            @Override
            protected Void doInBackground() {
                for (int i = 0; i < 270; i++) { //270:Distance que le fil doit parcourir avant de s'arrêter
                    fil.incrX();
                    //fil.incrY();
                    fil.repaint();
                    sleep(10);
                }
                return null;
            }
        }.execute();
    }

    
   /**


* Méthode de 'la sélection d'IT'

*/
public void goIt(){
    JOptionPane.showMessageDialog(null, "Sélectionner un IT");
   }
    
    
    /////////////////////////////
    

    private void goUraTap(LiaisonUraTap uraTap1) {
        new SwingWorker<Void, Void>() {
            @Override
            protected Void doInBackground() {
                for (int i = 0; i < 270; i++) { //270:Distance que le fil doit parcourir avant de s'arrêter
                    //uraTap1.incrUraX();
                    uraTap1.incrUraY();
                    uraTap1.repaint();
                    sleep(10);
                }
               return null;
            }
        }.execute();
    }

    
   //////////////////////////////////////////
    private static void sleep(long ms) {
        try {
            Thread.sleep(ms);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }   
}
0
Streamooc Messages postés 79 Date d'inscription samedi 17 juin 2017 Statut Membre Dernière intervention 8 février 2023
Modifié le 2 juil. 2017 à 11:56
Bonjour KX,
J'ai créé un JComboBox contenant 0,1,2 que j'appelle IT.Ensuite des petits rectangles représentant ces IT et également un fil rouge.Je veux qu'en sélectionnant un IT que le fil rouge remplisse le rectangle de cet IT.J'ai essayé las j'ai besoin s'il vous plait d'aides.Voici mon code:

public class FenetrePrincipale extends JFrame {

 private static final long serialVersionUID = 1L;

    public FenetrePrincipale() {
        setSize(1364, 788);
        setLocationByPlatform(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setLayout(null);

 IntervalleTemps it =new IntervalleTemps(150, 10);
         it.setLocation(992, 21);
         it.setSize(278,25);
         panel.add(it); // ajout au conteneur de 'it'
           
        //Ajout de tout le contenu au conteneur
        getContentPane().add(panel,BorderLayout.CENTER);
        




//Le bouton 'run'
        JButton buttonRun = new JButton("");
        buttonRun.setIcon(new ImageIcon(FenetrePrincipale.class.getResource("/sn/esmt/logicieltap/ressources/run.png.png")));
         buttonRun.setBounds(46, 658, 56, 35);
        panel.add(buttonRun);


//Rectangle vide représentant IT0
JToggleButton toggleButton_16 = new JToggleButton("");
        toggleButton_16.setIcon(new ImageIcon(FenetrePrincipale.class.getResource("/sn/esmt/logicieltap/ressources/barre.png")));
        toggleButton_16.setBounds(1155, 31, 96, 14);
        panel.add(toggleButton_16);
        

JLabel lblIt = new JLabel("IT 0");  //On écrit à côté du rectangle ceci 'IT 0'
        lblIt.setBounds(1261, 31, 46, 14);
        panel.add(lblIt);
        

//Rectangle vide représentant IT1
        JToggleButton toggleButton_17 = new JToggleButton("");
        toggleButton_17.setIcon(new ImageIcon(FenetrePrincipale.class.getResource("/sn/esmt/logicieltap/ressources/barre.png")));
        toggleButton_17.setBounds(1155, 52, 96, 14);
        panel.add(toggleButton_17);
        
 JLabel lblIt_1 = new JLabel("IT 1");  //On écrit à côté du rectangle ceci 'IT 1'
        lblIt_1.setBounds(1261, 52, 46, 14);
        panel.add(lblIt_1);
        

        //Combobox:La barre des intervalles de temps
     
      
      
          String[] messageStrings ={"0","1","2"};
 JComboBox cmbMessageList = new JComboBox(messageStrings);
        cmbMessageList.setBounds(474, 62, 37, 20);
        panel.add(cmbMessageList);
        
        
        //les  intervalles de temps à sélectionner
        cmbMessageList.addActionListener(e ->{
         switch ((String)cmbMessageList.getSelectedItem()) {
         case "0":labelIt.setText("IT 0 est réservé pour la synchronisation");
   break;
   
   case "1":labelIt.setText("Sélection de IT 1");
    break;
     }
        });
 //Utilisation uniquement du bouton 'boutonRun'
              //Exécuter les actions l'une après l'autre 
        buttonRun.addActionListener(new WorkflowActionListener(0, (state,e)->{
      switch (state) {
      case 0:
             //System.out.println("buttonRun: state 0");
             goMessageIt();
             return 1;
         case 1:
             //System.out.println("buttonRun: state 1");
           goIt(it);  //Initialisation du fil rouge
             return 2;
            default:
             throw new IllegalStateException("State invalid: " + state);
  }
     }));  
             

}

 
    /**


* Méthode de 'la sélection d'IT'

*/
 public void goMessageIt(){
     JOptionPane.showMessageDialog(null, "Sélectionner un IT");
    }
     
 
    /**


* Cette méthode permet de déclencher le mouvement de déclencher la couleur montrant l'IT sélectionné

* @param ura1

*/
    private void goIt(IntervalleTemps it) {
        new SwingWorker<Void, Void>() {
            @Override
            protected Void doInBackground() {
                for (int i = 0; i < 12; i++) { //270:Distance que le fil doit parcourir avant de s'arrêter
                    it.incrX();
                   
                   it.repaint();
                    it.setVisible(true);  //on voit le fil rouge défiler quand on appuie sur le bouton 'run'
                  
                   
                }
                return null;
            }
        }.execute();
    }

}

public class WorkflowActionListener implements ActionListener{

 private int state;
    private final BiFunction<Integer, ActionEvent, Integer> actionsPerformed;

    public WorkflowActionListener(int init, BiFunction<Integer, ActionEvent, Integer> actionsPerformed) {
        state = init;
        this.actionsPerformed = actionsPerformed;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        state = actionsPerformed.apply(state, e);
    }

}

public class IntervalleTemps extends Component{
 private static final long serialVersionUID = 1L;

    private int posX;
    private int posY;

    public IntervalleTemps(int posX, int posY) {
        this.posX = posX;
        this.posY = posY;
    }

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.red);
        g.fillRect(posX, posY, 98, 50);
    }

    public void incrX() {
        posX++;
    }

    public void incrY() {
        posY++;
    }


}

public class ClassePrincipale {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
   FenetrePrincipale fenetrePrincipale = new FenetrePrincipale();
         fenetrePrincipale.setVisible(true);

 }

}
0