cs_ABF
Messages postés227Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention26 avril 2012
-
16 mai 2008 à 15:49
cs_ABF
Messages postés227Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention26 avril 2012
-
18 mai 2008 à 18:49
Bonjour,
j'ai un soucis de GridLayout.
j'essaie de faire une grille d'image avec des Jlabel cote à cote
QUESTION :
1° Le chargement de mes images est impec mais je n'arrive pas à les coller entre elles
2°De plus, je n'arrive pas à donner le chemin relatif (non dur) de mon image
MON CODE :
import javax.swing.*;
import java.awt.*;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JFrame myFrame = new JFrame();
JPanel panel = new JPanel();
GridLayout jours = new GridLayout(3, 2, 10, 50);
panel.setLayout(jours);
panel.applyComponentOrientation( ComponentOrientation.RIGHT_TO_LEFT);
for (int i=1 ; i<7 ; i++)
{
ImageIcon image = new ImageIcon("C:\\Users\\Renfield\\Documents\\NetBeansProjects\\JavaApplication8\\src\\javaapplication8\\vide.jpg");
JLabel lbl = new JLabel(image);
lbl.setPreferredSize(new Dimension(30, 30));
panel.add (lbl);
}
myFrame.setContentPane(panel);
myFrame.setTitle("Viewer by Brice");
myFrame.setBounds(0,0,300,300);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 16 mai 2008 à 19:51
Salut:
public class Grid extends JPanel {
public static final int COUNT_X = 30;
public static final int COUNT_Y = 15;
public static final int WIDTH = 20;
public static final int HEIGHT = 20;
private JLabel[][] labels = new JLabel[COUNT_X][COUNT_Y];
public Grid() {
super(new GridLayout(COUNT_X, COUNT_Y, 1, 1));
}
public void createGrid() {
for (int i = 0; i < COUNT_X; i++) {
for (int j = 0; j < COUNT_Y; ++j) {
labels[i][j] = new JLabel();
labels[i][j].setPreferredSize(new Dimension(WIDTH, HEIGHT));
labels[i][j].setBorder(new BevelBorder(BevelBorder.RAISED));
add(labels[i][j]);
}
}
}
}
Pour pouvoir utiliser les chemins relatifs: Une solution simpliste consiste à placer le répertoire contenant les ressources (images, ...) à la racine de ton projet
cs_ABF
Messages postés227Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention26 avril 2012 17 mai 2008 à 10:49
Ha ca frame s'affiche, fallait mettre :
JFrame myFrame = new JFrame();
JPanel panel = new JPanel();
dans le méthode createGrid CEPENDANT, les Jlabels ne s'affiche pas !
ET je n'arrive toujours pas à mettre de chemin relatif : bon projet est fait comme ceci :
Mon Projet
- build
- dist
- nbproject
- src
- Mon Projet
- toutes les classes (*.java)
- img
- toutes mes images (*.jpg)
- map
- toutes mes maps (*.txt)
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 17 mai 2008 à 20:09
Salut:
Exécutes ce code: pour simplifier les choses créer un nouveau projet pour les deux classe Grid et MyFrame telle que la classe MyFrame sera le point d'entrée de ton programme.
// Grid.java
public class Grid extends JPanel {
public static final int COUNT_X = 30;
public static final int COUNT_Y = 15;
public static final int WIDTH = 20;
public static final int HEIGHT = 20;
private JLabel[][] labels = new JLabel[COUNT_X][COUNT_Y];
public Grid() {
super(new GridLayout(COUNT_X, COUNT_Y, 1, 1));
}
public void createGrid() {
for (int i = 0; i < COUNT_X; i++) {
for (int j = 0; j < COUNT_Y; ++j) {
labels[i][j] = new JLabel();
labels[i][j].setPreferredSize(new Dimension(WIDTH, HEIGHT));
labels[i][j].setBorder(new BevelBorder(BevelBorder.RAISED));
add(labels[i][j]);
}
}
}
}
// MyFrame.java
public class MyFrame extends JFrame {
public MyFrame() {
super("Grid");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Grid grid = new Grid();
grid.setPreferredSize(new Dimension(600, 600));
cs_ABF
Messages postés227Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention26 avril 2012 17 mai 2008 à 21:34
OK j'ai fait ca mais j'ai qu'une frame qui se lance !
Je ne vois pas ou tu veux en venir !!!
Je voulais faire un quadrillage de Jlabel et attribuer aux Jlabel une image
Et ensuite, via les labels[x][y].setIcon("monimage.jpg"); attribuer à l'image que je veux MAIS je n'y arrive pas !
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 17 mai 2008 à 23:42
Salut:
Est ce que c'est OK?
Pour les constantes WIDTH et HEIGHT il vaut mieux qu'elles soient égales au dimensions communes des images utilisés.
Je pense qu'il faut modifier le code de cette façon:
// Grid.java
public class Grid extends JPanel {
public static final int COUNT_X = 30;
public static final int COUNT_Y = 15;
public static final int WIDTH = 20;
public static final int HEIGHT = 20;
private JLabel[][] labels = new JLabel[COUNT_X][COUNT_Y];
public Grid() {
super(new GridLayout(COUNT_X, COUNT_Y, 1, 1));
// Appeler la méthode createGrid dans le constructeur
// Comme ça on ne risque pas d'oublier
createGrid();
}
// Réduire la visibilité de cette méthode
private void createGrid() {
for (int i = 0; i < COUNT_X; i++) {
for (int j = 0; j < COUNT_Y; ++j) {
labels[i][j] = new JLabel();
labels[i][j].setPreferredSize(new Dimension(WIDTH, HEIGHT));
labels[i][j].setBorder(new BevelBorder(BevelBorder.RAISED));
add(labels[i][j]);
}
}
}
}
// MyFrame.java
public class MyFrame extends JFrame {
public MyFrame() {
super("Grid");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Grid grid = new Grid();
//grid.setPreferredSize(new Dimension(600, 600));
cs_ABF
Messages postés227Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention26 avril 2012 18 mai 2008 à 00:42
Re,
Oui c'est impeccable, ma grille se fait de la bonne facon et je te remercie MAIS, le chemin relatif des images ne fonctionne pas !!!
Je suis obligé de mettre en dur et c'est immonde comme code !
Ensuite, si je suis ta logique et que je veux faire une methode qui s'execute toute les X secondes, puis je faire une classe qui herite de TimerTask ?
ex :
static class moteurSimul extends TimerTask {
private int xTrain; // horizontale
private int yTrain; // verticale
private Icon imgTmp; //image temporaire sur laquelle on va aller
private int i;
/**
* Permet d'actionner le train
*/
/*
public void run(){
et pour changer d'image, je creer une methode dans la classe Grid.
public void setImage(int x, int y, String img) {
labels[x][y].setIcon(new ImageIcon(img));
}
puis j'implemante une nouvelle instance de la classe GRid ainsi dans mon "run" de la classe ci-dessus j'aurais juste a mettre :
maGrid.setImage(monX,monY,monImg) ??
Serieusement je galère sec !
Merci de ta grande aide déjà ;)
Si tu veux que l'on aille plus vite je serais dispo tout demain (je t'envoie mon MSN en PV)
cs_ABF
Messages postés227Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention26 avril 2012 18 mai 2008 à 11:29
Ca y est pour les images j'ai réussit,
Avec NetBeans, il faut completement sortir du repertoire scr et ce positionner dans le repertoire de base (nom du projet) !!!