WindowsBuilder swing java
Streamooc
Messages postés
74
Date d'inscription
Statut
Membre
Dernière intervention
-
Streamooc Messages postés 74 Date d'inscription Statut Membre Dernière intervention -
Streamooc Messages postés 74 Date d'inscription Statut Membre Dernière intervention -
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:
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:
- WindowsBuilder swing java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
Bonjour,
Tu ne peux pas mettre deux composants dans une même "case" du BorderLayout, donc
Une manière de faire, c'est de mettre un JPanel au centre pour y mettre tes deux composants mais sans le BorderLayout.
Exemple :
Remarque : il y a une petite erreur sur
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...
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:
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); } }
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
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
Moi je testes ton code et y a rien qui s'affiche...
Remarque :
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 :