Des petits JPanel en mouvement sur un plus grand JPanel
philub
Messages postés
259
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'aimerais créer un grand JPanel avec comme constructeur une ImageIcon sur laquelle il y aurait des petits JPanel (aussi des ImageIcon) qui se promèneraient indépendamment les unes des autres verticalement, horizontalement ou diagonalement. Le défit est de trouver un moyen de savoir la position de chaque petits JPanel.
J'espère qu'il existe un moyen pour avoir une grille transparente (composée de carrés) de positions (x,y) où je pourrai mettre les petits JPanel et laisser des positions vides...
Si vous avez une technique ou des conseils, ça serait vraiment très apprécié.
J'aimerais créer un grand JPanel avec comme constructeur une ImageIcon sur laquelle il y aurait des petits JPanel (aussi des ImageIcon) qui se promèneraient indépendamment les unes des autres verticalement, horizontalement ou diagonalement. Le défit est de trouver un moyen de savoir la position de chaque petits JPanel.
J'espère qu'il existe un moyen pour avoir une grille transparente (composée de carrés) de positions (x,y) où je pourrai mettre les petits JPanel et laisser des positions vides...
Si vous avez une technique ou des conseils, ça serait vraiment très apprécié.
A voir également:
- Des petits JPanel en mouvement sur un plus grand JPanel
- Photo insta en grand - Guide
- Trier du plus petit au plus grand excel - Guide
- Comment imprimer un grand tableau excel sur une seule page - Guide
- Ordinateur portable grand ecran - Guide
- Petite amie virtuelle en français gratuit - Accueil - Intelligence artificielle
1 réponse
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(); } }
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.
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.