jekif
Messages postés7Date d'inscriptionmercredi 10 décembre 2003StatutMembreDernière intervention10 février 2004
-
10 déc. 2003 à 21:26
vinvay
Messages postés36Date d'inscriptionmardi 7 mai 2002StatutMembreDernière intervention31 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...
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;
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]);
}
}
cs_aeled
Messages postés108Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention10 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
jekif
Messages postés7Date d'inscriptionmercredi 10 décembre 2003StatutMembreDernière intervention10 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
vinvay
Messages postés36Date d'inscriptionmardi 7 mai 2002StatutMembreDernière intervention31 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é !!