ge17
Messages postés15Date d'inscriptionmercredi 18 juin 2008StatutMembreDernière intervention30 juillet 2008
-
18 juin 2008 à 09:36
cs_jojolemariole
Messages postés519Date d'inscriptionmercredi 21 mars 2007StatutMembreDernière intervention19 décembre 2016
-
19 juin 2008 à 09:58
Bonjour
Je programme en JAVA sous "netbeans" sur un projet.
Je voudrais savoir comment, à partir d'une première class, exécuter une méthode qui appartient à une seconde class. Je m'explique :
J'ai ma première class pricipale ("public class Menu extends JMenuBar") dans laquelle il y a une class interne ("public class GestionExporter implements ActionListener") qui gère l'action d'un sous-item et qui possède à son tour une méthode ("public void actionPerformed(ActionEvent ev)") qui doit exécuter quelquechose quand on clique dessus.
Dans cette méthode ("public void actionPerformed(ActionEvent ev)"), je voudrais exécuter la méthode ("public void actionPerformedOne(ActionEvent ev)") qui appartient à la seconde class principale ("public class Page3 extends JPanel implements Printable").
Donc au final je voudrais savoir ce que je doit écrire dans la méthode ("public void actionPerformed(ActionEvent ev)") pour pouvoir éxecuter le programme qui se trouve dans la méthode ("public void actionPerformedOne(ActionEvent ev)") d'une autre class.
cs_jojolemariole
Messages postés519Date d'inscriptionmercredi 21 mars 2007StatutMembreDernière intervention19 décembre 201625 18 juin 2008 à 10:33
Salut,
Tu rajoutes un attribut :
private Page3 page3;
au début de ta classe Menu.
Tu renseignes cet attribut à l'instanciation d'un Menu, en gros tu complètes ton constructeur :
public Menu(...., Page3 page3, .....){
......
this.page3 = page3;
......
}
Et ensuite dans la méthode actionPerformed de ta classe GestionExporter, tu peux écrire :
page3.actionPerformedOne(ev);
La classe qui instancie ton Menu, celle qui fait actuellement :
Menu menu = new Menu(......);
devra changer son appel au constructeur, puisque tu auras changé le constructeur, tu vas devoir remplacer par :
Menu menu = new Menu(..., page3, ...);
Ensuite si tu la classe / méthode qui instancie menu n'a pas accès à page3, tu essaies de voir comment tu peux faire, sachant que les liens entre des classes en Java se font, la plupart du temps, au moyen d'attributs (variables globales au début, normalement, de ta classe).
ge17
Messages postés15Date d'inscriptionmercredi 18 juin 2008StatutMembreDernière intervention30 juillet 2008 18 juin 2008 à 14:52
re bonjour jojolemariole
Voilà j'ai essayer d'intégrer ce que tu m'avais proposé mais lorsque j'essaye de compiler le projet, le débugger m'envoie ce message d'erreur que je n'arrive pas à comprendre :
"Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException"
cs_jojolemariole
Messages postés519Date d'inscriptionmercredi 21 mars 2007StatutMembreDernière intervention19 décembre 201625 18 juin 2008 à 15:05
Salut,
La compilation d'un projet ne génère pas de NullPointerException, c'est une erreur qui arrive à l'exécution. Si tu veux qu'on t'aide il va falloir nous montrer ton message d'erreur au complet ainsi que les morceaux de code concernés.
ge17
Messages postés15Date d'inscriptionmercredi 18 juin 2008StatutMembreDernière intervention30 juillet 2008 18 juin 2008 à 15:36
voici le message d'erreur complet:
Le bouton 'Exporter' a été cliquer
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at BNG.Application.Menu$GestionExporter.actionPerformed(Menu.java:343)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1216)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1257)
at java.awt.Component.processMouseEvent(Component.java:6038)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
at java.awt.Component.processEvent(Component.java:5803)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4410)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2429)
at java.awt.Component.dispatchEvent(Component.java:4240)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
la class Menu ou je demande l'execution de la méthode "public void actionPerformedOne(ActionEvent ev)" :
(Parties de programme modifiées)
/**Déclaration de la classe Menu**/
public class Menu extends JMenuBar {
/**Déclaration des méthodes utilisées pour créer une barre de menu**/
protected JMenu fichier = new JMenu("Fichier");
/**
* Icon
*/
////
protected JMenuItem internet = new JMenuItem(" Internet");
protected JMenuItem quitter = new JMenuItem(" Quitter");
protected JMenuItem rafraichissement = new JMenuItem(" Rafraichir la ref PC");
protected JMenuItem exporter = new JMenuItem(" Exporter");
protected JMenuItem imprimer = new JMenuItem(" Imprimer");
/**
* Menu d'aide
*/
protected JMenu aide = new JMenu("?");
/**
* A propos
*/
protected JMenuItem ap = new JMenuItem("A propos de ...");
/**Déclaration de classe extèrieures pour permettre leur appel**/
protected Impression impression = new Impression();
// protected Rechercher rechercher1 ;
public Acceuil retouracceuil;
public Printable Page3;
private Page3 page3;
/**
* Méthode constructeur de Menu*
* @param acceuil_ Acceuil
*/
public Menu(Acceuil acceuil_, Page3 page3) {
/**Initialisation de la classe "Rechercher"**/
retouracceuil = acceuil_;
this.Page3 = page3;
.
.
.
.
.
fichier.add(exporter); /**Application graphique du sous-item 'imprimer'de l'item 'Fichier'**/
exporter.addActionListener(new GestionExporter()); /**De même pour le sous-item 'imprimer'**/
fichier.addSeparator();
.
.
.
/**
* Class de gestion de l'exportation des données
*/
public class GestionExporter implements ActionListener /**Evènement du bouton 'Exporter'**/
{
/**
* Methode d'exportation
* @param ev ActionEvent
*/
public void actionPerformed(ActionEvent ev)
{
Variable.out.println("Le bouton 'Exporter' a été cliquer");
page3.actionPerformedOne(ev);
}
}
}
la class Page3 où se trouve cette méthode :
public class Page3 extends JPanel implements Printable{
protected Acceuil retouracceuil;
.
.
.
public void actionPerformedOne(ActionEvent ev) {
//Variable.out.println("Le bouton 'Exporter' a été cliquer");
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
try {
WritableWorkbook workbook = Workbook.createWorkbook(new File("sortie.xls"));
WritableSheet sheet = workbook.createSheet("Premier classeur", 0);
int nbRow = table.getRowCount();
int nbCol = table.getColumnCount();
//for(int i=0;i<table.getModel().getRowCount();i++){
for(int i=0;i<nbRow;i++){
for(int j=0;j<nbCol-2;j++){
int ireal=table.convertRowIndexToModel(i);
int jreal=table.convertColumnIndexToModel(j);
if(!table.getValueAt(i,j).getClass().getName().equals("java.lang.String")){
Component c = table.getCellRenderer(ireal,j).getTableCellRendererComponent(table,table.getValueAt(i,j),false,false,i,j);
WritableFont w = new WritableFont(WritableFont.ARIAL, 10,WritableFont.BOLD, true, UnderlineStyle.NO_UNDERLINE,Colour.WHITE, ScriptStyle.NORMAL_SCRIPT);
WritableCellFormat wc = new WritableCellFormat(w);
wc.setBackground(couleur.get(c.getBackground()));
sheet.addCell(new Label(j,i+1,"",wc));
}else{
sheet.addCell(new Label(j,i+1,(String)table.getValueAt(i,j)));
}
}
}
ge17
Messages postés15Date d'inscriptionmercredi 18 juin 2008StatutMembreDernière intervention30 juillet 2008 18 juin 2008 à 15:53
Merci
J'ai corrigé l'erreur mais ce ne change rien. Quand j'exécute mon application et que je clique sur le sous-item "exportet" j'ai les mêmes messages d'erreurs dans ma console.
Tu ne vois pas autre chose qui cloche concernant l'appel de la méthode extérieur?
cs_jojolemariole
Messages postés519Date d'inscriptionmercredi 21 mars 2007StatutMembreDernière intervention19 décembre 201625 18 juin 2008 à 16:53
C'est-à-dire? toujours la NullPointerException?
Essaie de voir sur quelle ligne a lieu l'erreur :
Variable.out.println("Le bouton 'Exporter' a été cliquer"); OU BIEN
page3.actionPerformedOne(ev);
si c'est sur la première ligne, peux-tu détailler ce qu'est Variable?
si c'est la deuxième ligne, vérifie que dans le construteur, page3 ne vaut pas null. si il ne vaut pas null, vérifie que tu ne le changes pas entre le construteur et l'action exporter.
ge17
Messages postés15Date d'inscriptionmercredi 18 juin 2008StatutMembreDernière intervention30 juillet 2008 19 juin 2008 à 08:10
l'erreur a lieu après avoir afficher le message "Le bouton 'Exporter' a été cliquer".
Le problème c'est que je n'ai jamais déclaré page3 comme null mais page n'est jamais initialisé à une valeur quelconque. Donc si ca vient de là, comment je pourrait initialiser cette variable page3.