Matrice interface graphique java
Résolu/Fermé
Nouyou
Messages postés
40
Date d'inscription
lundi 1 décembre 2014
Statut
Membre
Dernière intervention
16 mars 2016
-
Modifié par KX le 19/03/2015 à 18:19
Nouyou Messages postés 40 Date d'inscription lundi 1 décembre 2014 Statut Membre Dernière intervention 16 mars 2016 - 22 mars 2015 à 00:01
Nouyou Messages postés 40 Date d'inscription lundi 1 décembre 2014 Statut Membre Dernière intervention 16 mars 2016 - 22 mars 2015 à 00:01
A voir également:
- Matrice interface graphique java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Changer carte graphique - Guide
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
1 réponse
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
Modifié par KX le 21/03/2015 à 18:01
Modifié par KX le 21/03/2015 à 18:01
Bonjour,
"je suis debutante en javax"
Déjà un peu de vocabulaire, "javax" ne désigne rien de particulier, ça regroupe juste un ensemble de bibliothèques qui ont été développées à l'origine par des tiers avant d'être incorporés à l'API standard Java.
Dans ton cas on dirait plutôt que tu es débutante en Swing.
Ensuite, ton code ne compile pas, il y a des bugs sur ton actionPerformed (le "witch" au lieu de "switch" et les variables x et n qui n'existent pas...) mais j'essaye même pas de déboguer ça, on va reprendre tout depuis le début.
Tu as ce que l'on appelle des Layout qui permettent de gérer la disposition des composants Swing, en l'occurence puisque tu fais une grille, un GridLayout serait l'idéal. (How to Use GridLayout).
Voici une refonte de ton code avec un GridLayout :
"je suis debutante en javax"
Déjà un peu de vocabulaire, "javax" ne désigne rien de particulier, ça regroupe juste un ensemble de bibliothèques qui ont été développées à l'origine par des tiers avant d'être incorporés à l'API standard Java.
Dans ton cas on dirait plutôt que tu es débutante en Swing.
Ensuite, ton code ne compile pas, il y a des bugs sur ton actionPerformed (le "witch" au lieu de "switch" et les variables x et n qui n'existent pas...) mais j'essaye même pas de déboguer ça, on va reprendre tout depuis le début.
Tu as ce que l'on appelle des Layout qui permettent de gérer la disposition des composants Swing, en l'occurence puisque tu fais une grille, un GridLayout serait l'idéal. (How to Use GridLayout).
Voici une refonte de ton code avec un GridLayout :
package graphe; public class Test { public static void main(String[] args) { new Matrice(10,10); } }
package graphe; import java.awt.GridLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class Matrice extends JFrame { private static final long serialVersionUID = 1L; private final int width; private final int height; private final JLabel[] horizon; private final JLabel[] vertical; private final JButton[][] centre; private final ImageIcon ZERO = new ImageIcon("0.jpg"); private final ImageIcon ONE = new ImageIcon("1.jpg"); public Matrice(int width, int height) { this.width = width; this.height = height; horizon = new JLabel[width]; vertical = new JLabel[height]; centre = new JButton[width][height]; initFrame(); fillContent(); this.setVisible(true); } private void initFrame() { this.setSize(700, 700); this.setTitle("Matrice du graphe"); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private JLabel createColumnHeader(int x) { horizon[x] = new JLabel("H" + (x + 1)); return horizon[x]; } private JLabel createRowHeader(int y) { vertical[y] = new JLabel("V" + (y + 1)); return vertical[y]; } private JButton createCell(int x, int y) { centre[x][y] = new JButton(); centre[x][y].addActionListener(new MatriceListener(this,x,y)); return centre[x][y]; } public void fillContent() { this.setLayout(new GridLayout(width+1, height+1)); this.add(new JLabel()); for (int x = 0; x < width; x++) this.add(createColumnHeader(x)); for (int y = 0; y < height; y++) { this.add(createRowHeader(y)); for (int x=0; x<width; x++) this.add(createCell(x,y)); } } public void setIcon(int x, int y) { centre[x][y].setIcon(ONE); } }
package graphe; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class MatriceListener implements ActionListener { private final Matrice mat; private final int x; private final int y; public MatriceActionListener(Matrice mat, int x, int y) { this.mat = mat; this.x = x; this.y = y; } @Override public void actionPerformed(ActionEvent e) { mat.setIcon(x,y); } }La confiance n'exclut pas le contrôle
21 mars 2015 à 13:40
J'ai encore une petite question si ça ne vous dérange pas , je veux créer un bouton "Valider" sous la matrice , Est-ce que je dois diviser la fenêtre en deux sous panel ? un panel pour la matrice et un autre pour le bouton .
De plus ce bouton permet de compter le nombre de bouton cliqué dans la matrice et afficher la relation entre chaque label H avec un label V. et cet affichage dois apparaître dans une autre fenêtre , est t-il possible de faire ça ??
21 mars 2015 à 15:24
Oui, en combinant plusieurs Layout (A Visual Guide to Layout Managers)
"ce bouton permet de compter le nombre de bouton cliqué"
Ce n'est pas le bouton qui compte, tout au plus il affichera le résultat, mais l'action sera sur chacun des boutons cliqués.
"afficher la relation entre chaque label H avec un label V"
Je n'ai pas compris ce que tu voulais faire là...
"cet affichage dois apparaître dans une autre fenêtre"
Dans ce cas, créé toi un deuxième JFrame pour cet affichage, tu peux ouvrir autant de fenêtre que tu veux, ça ne pose pas de problème.
21 mars 2015 à 17:00
en fait cette matrice represente un graphe . si une case de la matrice contient la valeur 1 donc il y a une arête entre les deux sommet sinon il n y a pas , c'est ça le principe .
donc je vais afficher ce resultat avec le bouton "valider" et j'ai pensé d'instancier une matrice d'entier dans actionPerformed et l'affecter au constructeur de la nouvelle fenetre en cliquant sur valider , je pense que c'est la meilleur solution .
mais j'ai pas réussi à apparaitre le bouton valider en dessous de la matrice ,
j'ai besoin de votre aide s'il vous plait !
21 mars 2015 à 18:15
En supposant que tu ais créé un avant, tu peux modifier comme ceci :
"j'ai pensé d'instancier une matrice d'entier"
Pourquoi d'entiers ? Ta case est soit cliquée, soit non, des booléens suffiraient.
D'ailleurs pourquoi avoir mis des JButton dans la grille ? Tu aurais pu mettre des JCheckBox (How to Use Buttons, Check Boxes, and Radio Buttons)
21 mars 2015 à 23:06
"Et ça a marché ?"
j'ai voulu vous dire que j'ai réussit changer les couleurs de mes boutons ( j'ai pas mis un point d'interrogation c'est juste faute de frappe. et j'ai pas fait attention . )
Et pour le goButton j'ai écrit ce code
NB : value est une matrice d'entier que je l'ai instancier dans la classe Matrice
et je veux affecter value à la nouvelle fenêtre "Resultat"
goButton.addActionListener(this);
..
@Override
public void actionPerformed(ActionEvent e) {
Resultat R = new Resultat(value);
this.dispose();
}
public class Resultat extends JFrame {
private final int Mat[][];
public Resultat(int Mat[][]){
this.setSize(400, 400);
this.setVisible(true);
this.Mat=Mat;
}
}