Des petits JPanel en mouvement sur un plus grand JPanel
Fermé
philub
Messages postés
259
Date d'inscription
samedi 31 mars 2007
Statut
Membre
Dernière intervention
28 mars 2015
-
28 mars 2015 à 04:41
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 28 mars 2015 à 19:33
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 28 mars 2015 à 19:33
A voir également:
- Des petits JPanel en mouvement sur un plus grand JPanel
- Excel trier du plus grand au plus petit - Guide
- Photo insta en grand - Guide
- Ordinateur portable grand ecran - Guide
- Comment faire le signe plus grand que sur clavier ✓ - Forum Windows 8 / 8.1
- Alinéa trop grand word - Forum Bureautique
1 réponse
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
28 mars 2015 à 14:00
28 mars 2015 à 14:00
Bonjour,
Pourquoi tu parles de JPanel ? JPanel est une catégorie de Container, toi ce qu'il te faudrait ce sont plutôt des Component, un JLabel par exemple.
Quant à ton problème de déplacement, tu dois faire ça avec des Threads qui déplaceraient ton JLabel sur la JFrame...
Voir Defining and Starting a Thread et Doing Without a Layout Manager (Absolute Positioning).
Exemple :
Pourquoi tu parles de JPanel ? JPanel est une catégorie de Container, toi ce qu'il te faudrait ce sont plutôt des Component, un JLabel par exemple.
Quant à ton problème de déplacement, tu dois faire ça avec des Threads qui déplaceraient ton JLabel sur la JFrame...
Voir Defining and Starting a Thread et Doing Without a Layout Manager (Absolute Positioning).
Exemple :
import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class Test { private static void pause(long millis) { try { Thread.sleep(millis); } catch (Exception e) { } } public static void main(String[] args) { final Icon iconHorz = new ImageIcon("C:/rouge.png"); final JLabel horz = new JLabel(iconHorz); horz.setBounds(0, 0, iconHorz.getIconWidth(), iconHorz.getIconHeight()); final Icon iconVert = new ImageIcon("C:/bleu.png"); final JLabel vert = new JLabel(iconVert); vert.setBounds(0, 0, iconVert.getIconWidth(), iconVert.getIconHeight()); final JFrame frame = new JFrame(); frame.setSize(200,200); frame.setLayout(null); frame.add(horz); frame.add(vert); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); new Thread() { @Override public void run() { while (true) { while (horz.getX() < frame.getContentPane().getWidth()-horz.getWidth()) { horz.setLocation(horz.getX()+1, horz.getY()); pause(10); } while (horz.getX() > 0) { horz.setLocation(horz.getX()-1, horz.getY()); pause(5); } } } }.start(); new Thread() { @Override public void run() { while (true) { while (vert.getY() < frame.getContentPane().getHeight()-vert.getHeight()) { vert.setLocation(vert.getX(), vert.getY()+1); pause(10); } while (vert.getY() > 0) { vert.setLocation(vert.getX(), vert.getY()-1); pause(5); } } } }.start(); } }
28 mars 2015 à 18:26
J'ai testé votre code et j'ai trouvé l'animation très intéressante. J'essaie de faire en sorte d'avoir 50 petites images bleues qui restent à l'intérieur d'un grand carré rouge fixe. Les petites images se déplaceront dans toutes les directions selon un algorithme et obtenir la liste des positions des bleus avec un système de grille, une HashMap de positions et mettre à jour cette HashMap à chaque déplacement dans la grille afin d'adapter son objectif de déplacement.
C'est vraiment compliqué, dès que je trouve j'envoie le résultat. Je crois que c'est la logique de base qu'ils ont utilisé pour faire le jeux civilization. Dessiner une carte de fond, appliquer une grille de positions et ensuite placer les éléments (ouvrier, ville, Blé, etc.) Mon objectif final est beaucoup plus simple que de faire le jeu civilization.
28 mars 2015 à 19:33
Les algorithmes pour chaque case c'est la méthode run() du Thread (mon exemple est super basique). Quant à la HashMap on peut la faire comme ceci :
Remarque : j'ai mis tout le code dans la méthode main, mais pour faire propre il faudrait faire des classes Java, par exemple un Personnage dont un membre sera le JLabel et un autre le Thread, avec éventuellement plusieurs sous classes où chacune aurait un algorithme run() différent.
Et il n'est pas exclu de changer l'image du JLabel au fur et à mesure de son déplacement, par exemple avec un personnage qui regarde dans la direction où il va.