Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Grand débutant s'empêtre dans les classes [ Archives / Au secours ] (jekif)

mercredi 10 décembre 2003 à 21:26:59 | Grand débutant s'empêtre dans les classes

jekif

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. 761
c.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

vendredi 12 décembre 2003 à 12:47:51 | Re : Grand débutant s'empêtre dans les classes

aeled


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 !

aeled

samedi 13 décembre 2003 à 12:41:40 | Re : Grand débutant s'empêtre dans les classes

jekif

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. 761
c.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

mercredi 14 avril 2004 à 14:28:12 | Re : Grand débutant s'empêtre dans les classes

vinvay

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é !!



Cette discussion est classé dans : public, int, b1, b2, sousmenu


Répondre à ce message

Sujets en rapport avec ce message

Mon code bug pour un truc trop con [ par hallardc ] Voila je suis a l Institut International du Multimédia et je ne cromprends pas pourkoi mon source de java ne marche pas, si kelk un pouvait jeter un c Appel de classes semblables [ par colruyt ] Bonjour à tous,Voici le problème qui se pose à moi :Dans ma classe principale , je fait appel à 2 classes et chacunes de celle-ci affiche le contenu d Erreur d'execution: java.lang.NullPointerException [ par amjad ] A la compilation d'un projet java3D j'obtient le message d'erreur suivant :Exception in thread "main" java.lang.NullPointerException at javax.vecmath Probleme de tableaux. [ par canvin ] Bonojour,Voici mon problème. j'ai fait une classe tableaux avec un constructeur. : public class Tableau{ private int tab[]; pu JDialog avec tableau [ par Suffren ] Bonjour,je cherche à réaliser un JDialog avec des onglets qui donnent des tableaux avec Swing et AbstractTableModel mais çà ne marche pas.Existe-t-il actualier un JTable [ par devj ] je n'arrive pas à rafraichir mon JTable à l'ecrande facon dynamique (sur saisie de param ma requete s'execute, passe le resultset à MyModel, génére la Appel d'une classe depuis une autre [ par colruyt ] Bonjour a tous ,J'ai une classe qui fonctionne bien exécutée seule par contre quand je l'appelle depuis une autre , cela ne fonctionne pas !Si quelqu' recuperation de valeur [ par sheorogath ] voila je dois faire des crackme pour mon site et le site d'un copain mais voila j'ai fait le plus dur . mais j'arrive pas recuperer la valeur d'un jte ajouter dans cette table des button (JAVA JTABLE JBUTTON) [ par zarziszita ] salut a toutes le monde mon probleme que j'ai envie ajouter deux button a la fin de table une des button permet ajouter un ligne .le methode main se t pb de changement de panel [ par Serik ] Voilà j'ai une "pile" de Panel, et dans un je veux aller dans l'autre...etc mais un bug se produit : il faut faire un resize de la fenêtre pour que ça


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.