Grand débutant s'empêtre dans les classes

jekif Messages postés 7 Date d'inscription mercredi 10 décembre 2003 Statut Membre Dernière intervention 10 février 2004 - 10 déc. 2003 à 21:26
vinvay Messages postés 36 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 31 janvier 2007 - 14 avril 2004 à 14:28
J'essaie de créer mes premières classes pour une interface graphique. J'essaie en particulier de créer pour l'instant des boites de dialogues type Confirmation (oui,non) et Alerte (ok) ainsi qu'une JMenuBar configurable "à distance".

Ce qui se passe c'est des erreurs que j'ai du mal à résoudre pour le moment. Ça fait 5 jours que je me mets au Java et, bouh... j'ai un peu mañ au crâne.

Enfin je crois que je ferais mieux de vous faire parvenir les sources de mes fichiers, en espérant que quelqu'un prendra le temps de les analyser, de les débugger et de m'expliquer ce qui ne va pas. Je remercie d'avance les âmes sensibles qui se pencheront sur mes petits problèmes...

Fichier 1 : HOHO.java

import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;

public class HOHO extends JFrame {
public static void main(String[] argv) {
ConfigMenu monMenu = new ConfigMenu();
Fenetre maFenetre = new Fenetre("Exemple de menus",500,400,monMenu);
}
}

class ConfigMenu {
String[] titreMenu = new String[4];
String[][] sousMenu = new String[4][7];
ActionListener[][] reaction = new ActionListener[4][7];
JSeparator separateur;
int nbMenu;
int nbSousMenu;
int nbReaction;

ConfigMenu() {
nbMenu = 4;
nbSousMenu = 7;
nbReaction = 7;
titreMenu[0] = "Clients";
titreMenu[1] = "Fitxes tècniques";
titreMenu[2] = "Productes de serveis";
titreMenu[3] = "Productes de venta";
sousMenu[0][0] = "Nova";
sousMenu[0][1] = "Modificar";
sousMenu[0][2] = "Suprimir";
sousMenu[0][3] = "separateur";
sousMenu[0][4] = "Buscar";
sousMenu[0][5] = "Llistes";
sousMenu[0][6] = "Estadistiques";
sousMenu[1][0] = "Nova";
sousMenu[1][1] = "Modificar";
sousMenu[1][2] = "Suprimir";
sousMenu[1][3] = "Buscar";
sousMenu[1][4] = "Llistes fitxes d'un client";
sousMenu[1][5] = "Llistes fitxes d'un serveis";
sousMenu[1][6] = "LListes fitxes entre dos dates";
sousMenu[2][0] = "Productes de serveis";
sousMenu[3][0] = "Productes de venta";
reaction[0][0] = new ActionListener() {
public void actionPerformed(ActionEvent e) {
Fenetre.Alerte alerte = new Fenetre.Alerte("Ouvrir un fichier");
Fenetre.desktop.add(alerte);
try {
alerte.setSelected(true);
} catch (java.beans.PropertyVetoException ve) {}
}};
reaction[1][0] = null;
reaction[2][0] = null;
reaction[3][0] = null;
}
}

Fichier 2 : Fenetre.java

import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;

public class Fenetre extends JFrame {
JDesktopPane desktop;
JPanel panel;
MaBarreMenu maBarreMenu;
static int compte = 0;

public Fenetre(String s, int l, int h,ConfigMenu menu) { // Constructeur String titre, int largeur, int hauteur
super(s);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}});
setup(l,h);
maBarreMenu = new MaBarreMenu(menu);
desktop = new JDesktopPane();
panel = new JPanel();
panel.setBackground(Color.orange);
getContentPane().add(desktop);
getContentPane().add(panel);
setVisible(true);
}

void setup(int l, int h) {int largeur l, hauteur h;
setSize(largeur, hauteur);
Dimension tailleEcran = Toolkit.getDefaultToolkit().getScreenSize();
int largeurEcran = tailleEcran.width;
int hauteurEcran = tailleEcran.height;
int xPos = (largeurEcran - largeur) / 2;
int yPos = (hauteurEcran - hauteur) / 2;
setLocation(xPos, yPos);
}

abstract class Dialogue extends JInternalFrame {

JLabel L1;
JButton B1, B2;

public Dialogue() { super(); }
public Dialogue(String s) { super(s,false,true,false,false); }

void center() {
int xB = 0;
int yB = 0;
if (B2!=null) {
xB = Math.max(B1.getPreferredSize().width,B2.getPreferredSize().width);
yB = Math.max(B1.getPreferredSize().height,B2.getPreferredSize().height);
} else if (B2==null) {
xB = B1.getPreferredSize().width;
yB = B1.getPreferredSize().height;
}
B1.setPreferredSize(new Dimension(xB,yB));
B1.setMaximumSize(new Dimension(xB,yB));
B1.setMinimumSize(new Dimension(xB,yB));
if (B2!=null) {
B2.setPreferredSize(new Dimension(xB,yB));
B2.setMaximumSize(new Dimension(xB,yB));
B2.setMinimumSize(new Dimension(xB,yB));
}
int x = 0;
if (B2!=null) x = Math.max(L1.getPreferredSize().width, 2 * xB);
else x = Math.max(L1.getPreferredSize().width, xB);
int y = L1.getPreferredSize().height + yB;
setSize((int)((x+50)*1.2),(int)((y+20)*1.8));
int xPos = (Fenetre.this.getContentPane().getSize().width - getSize().width)/2;
int yPos = (int)((Fenetre.this.getContentPane().getSize().height - getSize().height)/2.5);
setLocation(xPos, yPos);
}
}

class Confirmation extends Dialogue {
public Confirmation(String s) {
super("Confirmation"); // Constructeur de la superclasse JFrame

addInternalFrameListener(new InternalFrameAdapter() {
public void internalFrameClosing(InternalFrameEvent e) {
dispose();
}});

Font f = new Font("Dialog",Font.BOLD, 12);

getContentPane().setLayout(new GridBagLayout()); // Mise en place d'un ContentPane avec un GridBagLayout
GridBagConstraints c = new GridBagConstraints();// Création des paramètres du GridBagLayout

L1 = new JLabel(s); // Création du label
// Configuration de l'affichage dans le layout -> v. Guide du Développeur p. 761
c.weightx = 1;
c.weighty = 1;c.gridwidth GridBagConstraints.REMAINDER; // Position relative : GridBagConstraints.REMAINDER> fin de ligne
c.gridheight = 1;
getContentPane().add(L1,c); // Affichage du texte

B1 = new JButton("Oui"); // Création premier bouton
B1.setFont(f);
B1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {}
});
// Configuration de l'affichage
c.gridwidth = GridBagConstraints.RELATIVE;c.gridheight GridBagConstraints.REMAINDER; // Position relative : GridBagConstraints.RELATIVE> fin de cellule
getContentPane().add(B1,c);// Affichage du premier bouton

B2 = new JButton("Non"); // Création du second bouton
B2.setFont(f);
B2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {}
});
getContentPane().add(B2,c); // Affichage du second bouton

center();// on centre la fenêtre à l'écran (fonction héritée de la classe Dialogue)
setResizable(false);
setVisible(true);
}
}

class Alerte extends Dialogue {
public Alerte(String s) {
super("Attention !");
addInternalFrameListener(new InternalFrameAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}});

Font f = new Font("Dialog",Font.BOLD, 12);

getContentPane().setLayout(new GridBagLayout()); // Mise en place d'un ContentPane avec un GridBagLayout
GridBagConstraints c = new GridBagConstraints();
L1 = new JLabel(s);
// Configuration de l'affichage dans le layout
c.weightx = 1; // v. Guide du Développeur p. 761
c.weighty = 1; // v. Guide du Développeur p. 761c.gridwidth GridBagConstraints.REMAINDER;// Position relative : GridBagConstraints.REMAINDER> fin de ligne
c.gridheight = 1;
// Affichage du texte
getContentPane().add(L1,c);
// Création bouton
B1 = new JButton("Accepter");
B1.setFont(f);
B1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {}
});

// Affichage du bouton
getContentPane().add(B1,c);

// on centre la fenêtre à l'écran (fonction définit ci-dessous)
center();
setVisible(true);
setResizable(false);
}
}

class MaBarreMenu extends JMenuBar {
JMenuBar mb;

MaBarreMenu(ConfigMenu m) {
mb = new JMenuBar();

JMenu[] menu = new JMenu[m.nbMenu];
JMenuItem[][] item = new JMenuItem[m.nbMenu][m.nbSousMenu];

for (int i=0;i<m.titreMenu.length;i++) {
menu[i] = new JMenu(m.titreMenu[i],true);

for (int j=0;j<m.sousMenu[i].length;j++) {
if (m.sousMenu[i][j] == "separateur") {
menu[i].add(new JSeparator());
} else {
item[i][j] = new JMenuItem(m.sousMenu[i][j]);
item[i][j].addActionListener(m.reaction[i][j]);
menu[i].add(item[i][j]);
}
}

mb.add(menu[i]);
}

setJMenuBar(mb);
}
}
}

Jekif le Java

3 réponses

cs_aeled Messages postés 108 Date d'inscription mardi 25 novembre 2003 Statut Membre Dernière intervention 10 mars 2005
12 déc. 2003 à 12:47
Tu balance le code en vrac mais tu n'expliques pas ce qui bug ! Soit un peu plus précis pour que l'on ne cherche pas en plus de résoudre l'erreur, où elle se trouve ! :-p

aeled
0
jekif Messages postés 7 Date d'inscription mercredi 10 décembre 2003 Statut Membre Dernière intervention 10 février 2004
13 déc. 2003 à 12:41
Je vous redonne donc le code et les message d'erreurs lors de la compilation (des problèmes d'accessibilité entre les classes):

Fichier HOHO.java

import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;

public class HOHO extends JFrame {
public static void main(String[] argv) {
ConfigMenu monMenu =  new ConfigMenu();
Fenetre maFenetre = new Fenetre("Exemple de menus",500,400,monMenu);
}
}

class ConfigMenu {
String[] titreMenu = new String[4];
String[][] sousMenu = new String[4][7];
ActionListener[][] reaction = new ActionListener[4][7];
JSeparator separateur;
int nbMenu;
int nbSousMenu;
int nbReaction;

ConfigMenu() {
nbMenu = 4;
nbSousMenu = 7;
nbReaction = 7;
titreMenu[0] = "Clients";
titreMenu[1] = "Fitxes tècniques";
titreMenu[2] = "Productes de serveis";
titreMenu[3] = "Productes de venta";
sousMenu[0][0] = "Nova";
sousMenu[0][1] = "Modificar";
sousMenu[0][2] = "Suprimir";
sousMenu[0][3] = "separateur";
sousMenu[0][4] = "Buscar";
sousMenu[0][5] = "Llistes";
sousMenu[0][6] = "Estadistiques";
sousMenu[1][0] = "Nova";
sousMenu[1][1] = "Modificar";
sousMenu[1][2] = "Suprimir";
sousMenu[1][3] = "Buscar";
sousMenu[1][4] = "Llistes fitxes d'un client";
sousMenu[1][5] = "Llistes fitxes d'un serveis";
sousMenu[1][6] = "LListes fitxes entre dos dates";
sousMenu[2][0] = "Productes de serveis";
sousMenu[3][0] = "Productes de venta";
reaction[0][0] = new ActionListener() {
public void actionPerformed(ActionEvent e) {
Alerte alerte = new Fenetre.Alerte("Ouvrir un fichier");
desktop.add(alerte);
try {
alerte.setSelected(true);
} catch (java.beans.PropertyVetoException ve) {}
}};
reaction[1][0] = null;
reaction[2][0] = null;
reaction[3][0] = null;
}
}


Message d'erreur sur HOHO.java

D:\Program Files\JCreator LE\MyProjects\HOHO\HOHO.java:53: cannot resolve symbol
symbol: class Alerte 
Alerte alerte  = new Fenetre.Alerte("Ouvrir un fichier");
                                                        ^
D:\Program Files\JCreator LE\MyProjects\HOHO\HOHO.java:53: an enclosing instance that contains Fenetre.Alerte is required
Alerte alerte =  new Fenetre.Alerte("Ouvrir un fichier");
                                                                        ^
D:\Program Files\JCreator LE\MyProjects\HOHO\HOHO.java:54: cannot resolve symbol
symbol: variable desktop 
desktop.add(alerte);
                                                        ^
3 errors



Fichier Fenetre.java

import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;

public class Fenetre extends JFrame {
JDesktopPane desktop;
JPanel panel;
MaBarreMenu maBarreMenu;
static int compte  = 0;

public Fenetre(String s, int l, int h,ConfigMenu menu) { // Constructeur String titre, int largeur, int hauteur
super(s);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}});
setup(l,h);
maBarreMenu = new MaBarreMenu(menu);
desktop = new JDesktopPane();
panel = new JPanel();
panel.setBackground(Color.orange);
getContentPane().add(desktop);
getContentPane().add(panel);
setVisible(true);
}

void setup(int l, int h) {int largeur l, hauteur h;
setSize(largeur, hauteur);
Dimension tailleEcran = Toolkit.getDefaultToolkit().getScreenSize();
int largeurEcran = tailleEcran.width;
int hauteurEcran = tailleEcran.height;
int xPos = (largeurEcran - largeur) / 2;
int yPos = (hauteurEcran - hauteur) / 2;
setLocation(xPos, yPos);
}

abstract class Dialogue extends JInternalFrame {

JLabel L1;
JButton B1, B2;

public Dialogue() { super(); }
public Dialogue(String s) { super(s,false,true,false,false); }

void center() {
int xB = 0;
int yB = 0;
if (B2!=null) {
xB = Math.max(B1.getPreferredSize().width,B2.getPreferredSize().width);
yB = Math.max(B1.getPreferredSize().height,B2.getPreferredSize().height);
} else if (B2==null) {
xB = B1.getPreferredSize().width;
yB = B1.getPreferredSize().height;
}
B1.setPreferredSize(new Dimension(xB,yB));
B1.setMaximumSize(new Dimension(xB,yB));
B1.setMinimumSize(new Dimension(xB,yB));
if (B2!=null) {
B2.setPreferredSize(new Dimension(xB,yB));
B2.setMaximumSize(new Dimension(xB,yB));
B2.setMinimumSize(new Dimension(xB,yB));
}
int x = 0;
if (B2!=null) x = Math.max(L1.getPreferredSize().width, 2 * xB);
else x = Math.max(L1.getPreferredSize().width, xB);
int y = L1.getPreferredSize().height + yB;
setSize((int)((x+50)*1.2),(int)((y+20)*1.8));
int xPos = (Fenetre.this.getContentPane().getSize().width - getSize().width)/2;
int yPos = (int)((Fenetre.this.getContentPane().getSize().height - getSize().height)/2.5);
setLocation(xPos, yPos);
}
}

class Confirmation extends Dialogue {
public Confirmation(String s) {
super("Confirmation"); // Constructeur de la superclasse JFrame

addInternalFrameListener(new InternalFrameAdapter() {
public void internalFrameClosing(InternalFrameEvent e) {
dispose();
}});

Font f = new Font("Dialog",Font.BOLD, 12);

getContentPane().setLayout(new GridBagLayout()); // Mise en place d'un ContentPane avec un GridBagLayout
GridBagConstraints c = new GridBagConstraints();// Création des paramètres du GridBagLayout

L1 = new JLabel(s); // Création du label
// Configuration de l'affichage dans le layout -> v. Guide du Développeur p. 761
c.weightx = 1;
c.weighty = 1;c.gridwidth GridBagConstraints.REMAINDER; // Position relative : GridBagConstraints.REMAINDER> fin de ligne
c.gridheight = 1;
getContentPane().add(L1,c); // Affichage du texte

B1 = new JButton("Oui"); // Création premier bouton
B1.setFont(f);
B1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {}
});
// Configuration de l'affichage
c.gridwidth = GridBagConstraints.RELATIVE;c.gridheight GridBagConstraints.REMAINDER; // Position relative : GridBagConstraints.RELATIVE> fin de cellule
getContentPane().add(B1,c);// Affichage du premier bouton

B2 = new JButton("Non"); // Création du second bouton
B2.setFont(f);
B2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {}
});
getContentPane().add(B2,c); // Affichage du second bouton

center();// on centre la fenêtre à l'écran (fonction héritée de la classe Dialogue)
setResizable(false);
setVisible(true);
}
}

class Alerte extends Dialogue {
public Alerte(String s) {
super("Attention !");
addInternalFrameListener(new InternalFrameAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}});

Font f = new Font("Dialog",Font.BOLD, 12);

getContentPane().setLayout(new GridBagLayout()); // Mise en place d'un ContentPane avec un GridBagLayout
GridBagConstraints c = new GridBagConstraints();
L1 = new JLabel(s);
// Configuration de l'affichage dans le layout
c.weightx = 1; // v. Guide du Développeur p. 761
c.weighty = 1; // v. Guide du Développeur p. 761c.gridwidth GridBagConstraints.REMAINDER;// Position relative : GridBagConstraints.REMAINDER> fin de ligne
c.gridheight = 1;
// Affichage du texte
getContentPane().add(L1,c);
// Création bouton
B1 = new JButton("Accepter");
B1.setFont(f);
B1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {}
});

// Affichage du bouton
getContentPane().add(B1,c);

// on centre la fenêtre à l'écran (fonction définit ci-dessous)
center();
setVisible(true);
setResizable(false);
}
}

class MaBarreMenu extends JMenuBar {
JMenuBar mb;

MaBarreMenu(ConfigMenu m) {
mb = new JMenuBar();

JMenu[] menu = new JMenu[m.nbMenu];
JMenuItem[][] item = new JMenuItem[m.nbMenu][m.nbSousMenu];

for (int i=0;i<m.titreMenu.length;i++) {
menu[i] = new JMenu(m.titreMenu[i],true);

for (int j=0;j<m.sousMenu[i].length;j++) {
if (m.sousMenu[i][j] == "separateur") {
menu[i].add(new JSeparator());
} else {
item[i][j] = new JMenuItem(m.sousMenu[i][j]);
item[i][j].addActionListener(m.reaction[i][j]);
menu[i].add(item[i][j]);
}
}

mb.add(menu[i]);
}

setJMenuBar(mb);
}
}
}


Message d'erreur sur Fenetre.java

D:\Program Files\JCreator LE\MyProjects\HOHO\Fenetre.java:163: cannot resolve symbol
symbol  : class ConfigMenu 
location: class Fenetre.MaBarreMenu
MaBarreMenu(ConfigMenu m) {
                            ^
D:\Program Files\JCreator LE\MyProjects\HOHO\Fenetre.java:13: cannot resolve symbol
symbol  : class ConfigMenu 
location: class Fenetre
public Fenetre(String s, int l, int h,ConfigMenu menu) { // Constructeur String titre, int largeur, int hauteur
                                              ^
2 errors



Jekif le Java
0
vinvay Messages postés 36 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 31 janvier 2007
14 avril 2004 à 14:28
Declare tes classes Alerte, MaBarreMenu, ... en dehors de la classe Fenêtre et même mieux dans des fichiers séparés.
Ainsi tu pourras compiler ton fichier fenetre.java sans problème après cela tu pourra compiler hoho.java.
Je ne suis pas expert en java, mais il me semble qu'il ne faut pas déclarer une classe à l'intérieur d'une autre. Et le mieux est de mettre une classe par fichier nom_classe.java .
J'espère que j'aurai pu t'être d'une quelconque utilité !!
0
Rejoignez-nous