WindowsBuilder swing java
Streamooc
Messages postés
89
Statut
Membre
-
Streamooc Messages postés 89 Statut Membre -
Streamooc Messages postés 89 Statut Membre -
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
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
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
//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); } }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()) {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(); } } }