Bienvenue invité ( Connexion | Inscription )
Il est interdit de poster directement à la racine de ce forum.
Veuillez créer votre topic dans le sous-forum approprié.
31 Jan 2004, 18:54
Message
#1
|
|
|
Macbidouilleur de vermeil ! ![]() ![]() ![]() ![]() Groupe : Membres Messages : 814 Inscrit : 11 Oct 2002 Lieu : Nantes Membre no 4 083 |
J'ai une erreur en compil java super classique et que je crois comprendre... sauf que je ne sais pas comment corriger :
L'erreur : MyFrame.java:103: non-static method getColumns() cannot be referenced from a static context Le code : public class MyFrame extends Frame implements ActionListener { //description des champs... setLayout(new GridLayout(8, 3)); nbCol=GridLayout.getColumns(); pack(); show(); } DecimalFormat TempConv = new DecimalFormat("####0.00"); // public void textValueChanged (TextEvent e) : gestion du texte public void actionPerformed (ActionEvent e) { blal bla... } Je comprend que je fais appel à une méthode public à l'intérieur de l'objet que j'ai créé mais comment programmer pour obtenir le nombre de col de ma frame ? (NB : Objet du code essayer de comprendre pourquoi ma grille n'affiche que 2 colonnes alors que j'en demande 3... Ben oui quoi.. j'débute en java.) Merci d'avance. -------------------- Fan d'apple depuis ... 1987. Donc pas parmi les premiers, mais ça fait tout de même un moment. la vraie nouveauté, c'est ce qui ne vieillit pas malgré le temps. (Muriel Barbery) Membre n° 87 du club des AIPBP (Anciens Inscrits Pas Beaucoup de Posts) Voir la liste |
|
|
|
![]() |
1 Feb 2004, 10:42
Message
#2
|
|
|
Macbidouilleur de vermeil ! ![]() ![]() ![]() ![]() Groupe : Membres Messages : 814 Inscrit : 11 Oct 2002 Lieu : Nantes Membre no 4 083 |
QUOTE (molgow @ 1 Feb 2004, 09:05) Tu créée une nouvelle instance de la classe GridLayout!! Donc zeLayout doit être déclaré du type GridLayout (ou alors d'une superclasse de GridLayout, vu que le type statique (à la déclaration) n'est pas forcément égal au type dynamique (à l'exécution)). pour être formel: ClasseA var = new ClasseB(); => ClasseB <: ClasseA Pour l'erreur que tu as eu au tout début. N'oublies pas une chose: toutes les méthodes déclarées "static" sont des méthodes qui sont adressées à la classe elle-même (donc au "moule à objet"). Ensuite, les méthodes qui ne sont pas déclarées "static" sont des méthodes d'instances. Qui doivent donc être appelée sur un objet, sur une instance de ta classe. Tu ne peux donc pas appeler une méthode d'instance sur ta classe, et de la même manière tu ne peux pas appeler une méthode de classe sur une instance! Donc pour ton problème du début, tu nous a montré un bout de code qui ne veut rien dire (montre nous un peu plus, laisse au moins les déclarations de méthodes (car là c'est incompréhensible)! Mais à mon avis, tu devrais probablement transformer ta méthode static (où se situait le problème) en une méthode d'instance. Merci milles fois pour toutes explications!!! et le temps que tu y a passé ! Je crios comprendre ce que tu écris (pour être bien sûr, il faut que je procède à des tests). Cependant, une petite question : Est ce que l'on peut dire qu'une méthode statique est inclue dans l'objet ? Donc, qu'une méthode d'instance ( donc non statique, si j'ai compris) s'applique sur le moule à objet ? La vraie difficulté de ce language c'est bien de différencier les concepts, je trouve : classe, instances, objet, super classes... Pour mon code, j'en suis pas très fier mais bon. Voici toute ma classe myFrame appelé par main (Ha oui... j'ai pas encore effectué les modifs pour qu'il fonctionne comme indiqué ci dessus): QUOTE import java.awt.*; import java.awt.event.*; import java.text.DecimalFormat; public class MyFrame extends Frame implements ActionListener { TextField DegField = new TextField("0.00", 6), EchField = new TextField("", 3), Res1Field = new TextField("0.00", 15), Ech1Field = new TextField(" ", 3), Ech2Field = new TextField(" ", 3), Res2Field = new TextField("0.00", 15), MessageTexte = new TextField("", 20), Blanc = new TextField(" ",1), Blanc1 = new TextField(" ",1), Blanc2 = new TextField(" ",1); double Deg, Res1, Res2; String Ech, Ech1, Ech2; int nbCol; Temperature Temp; public MyFrame() { Temp = new Temperature(); setTitle("Convertisseur Température"); Label DegLabel = new Label("Nombre"), EchLabel = new Label("Echelle"), Res1Label = new Label("Conversion 1"), Res2Label = new Label("Conversion 2"), Blanc = new Label(" "), Blanc1 = new Label(" "), Blanc2 = new Label(" "); Panel DegLabelPanel = new Panel(new FlowLayout(FlowLayout.LEFT)), EchLabelPanel = new Panel(new FlowLayout(FlowLayout.LEFT)), Res1LabelPanel = new Panel(new FlowLayout(FlowLayout.LEFT)), Res2LabelPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); Panel DegFieldPanel = new Panel(new FlowLayout(FlowLayout.LEFT)), EchFieldPanel = new Panel(new FlowLayout(FlowLayout.LEFT)), Res1FieldPanel = new Panel(new FlowLayout(FlowLayout.LEFT)), Res2FieldPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); Panel BlancLabelPanel = new Panel(new FlowLayout(FlowLayout.RIGHT)), Blanc1LabelPanel = new Panel(new FlowLayout(FlowLayout.RIGHT)), Blanc2LabelPanel = new Panel(new FlowLayout(FlowLayout.RIGHT)), Ech1FieldPanel = new Panel(new FlowLayout(FlowLayout.LEFT)), Ech2FieldPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); Panel MessageTexteLabelPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); Button Bouton = new Button("Calcul"); DegLabelPanel.add(DegLabel); DegFieldPanel.add(DegField); EchLabelPanel.add(EchLabel); EchFieldPanel.add(EchField); Res1LabelPanel.add(Res1Label); Res1FieldPanel.add(Res1Field); Ech1FieldPanel.add(Ech1Field); Res2LabelPanel.add(Res2Label); Res2FieldPanel.add(Res2Field); Ech2FieldPanel.add(Ech2Field); BlancLabelPanel.add(Blanc); Blanc1LabelPanel.add(Blanc1); Blanc2LabelPanel.add(Blanc2); MessageTexteLabelPanel.add(MessageTexte); add(DegLabelPanel); add(DegFieldPanel); add(BlancLabelPanel); add(EchLabelPanel); add(EchFieldPanel); add(Blanc1LabelPanel); add(Res1LabelPanel); add(Res1FieldPanel); add(Ech1FieldPanel); add(Res2LabelPanel); add(Res2FieldPanel); add(Ech2FieldPanel); add(Blanc2LabelPanel); add(Bouton); add(MessageTexteLabelPanel); Bouton.addActionListener(this); Res1Field.setEditable(false); Res2Field.setEditable(false); Ech1Field.setEditable(false); Ech2Field.setEditable(false); MessageTexte.setEditable(false); /*DegField.addTextListener(this); EchField.addTextListener(this); addWindowListener(new MyAdapter(this)); */ // 8 : nombre de lignes, 3, nombre de colonnes, 4, H gap et Vgap /* En fait, le fait de mettre à 0 le nb de lignes permet de fixer le nb de colonnes. Le fait de mettre 8 n'est pas correcte en fait il faut mieux laisser le code faire.*/ setLayout(new GridLayout(0, 3)); c'est ici que j'ai positionné mes bidouilles : //nbCol=GridLayout.getColumns(); en fonction de vos remarques, je f'rai bien ce bout de code : GridLayout zeLayout = new GridLayout(0, 3); setLayout(ZeLayout); nbCol= ZeLayout.getColumns(); pack(); show(); } DecimalFormat TempConv = new DecimalFormat("####0.00"); // public void textValueChanged (TextEvent e) : gestion du texte public void actionPerformed (ActionEvent e) { /* Object source=e.getSource(); if (source == DegField || source == EchField) Permet de tester les champs plutôt que les boutons. */ /* test pour savoir pourquoi ma pûtain de grille ne marche pas. */ MessageTexte.setText(Integer.toString(nbCol)); if ( DegField.getText() != "0.00" && EchField.getText() != "" ) { Deg = Double.parseDouble(DegField.getText()); Ech = EchField.getText(); // Formule : 1°C=(10°F-320)/18 - 1°F= 1,8°C+32 // 1°C=(1°K + 273.15) <-> 1°K= 1°C - 273.15 // 1°K= 10°F/18 - 290,94 <-> 1°F= 1,8°K + 523,67 if ( Ech.equals("C") || Ech.equals("c")) { Ech1Field.setText("F"); Ech2Field.setText("K"); //double Temp=((10 * Deg)-320)/18 ; Temp.setNumber(((10 * Deg)-320)/18) ; Res1Field.setText(TempConv.format(Temp.getNumber())); Temp.setNumber(0.0); Temp.setNumber(Deg + 273.15); Res2Field.setText(TempConv.format(Temp.getNumber())); MessageTexte.setText("Et voilà le travail ©!"); } else { if ( Ech.equals("F") || Ech.equals("f") ) { Ech1Field.setText("C"); Ech2Field.setText("K"); //double Temp= (1.8 * Deg)+32; Temp.setNumber((1.8 * Deg)+32); Res1Field.setText(TempConv.format(Temp.getNumber())); Temp.setNumber(0.0); Temp.setNumber((1.8*Deg) + 523.67); Res2Field.setText(TempConv.format(Temp.getNumber())); MessageTexte.setText("Et voilà le travail(F)!"); } else { if ( Ech.equals("K") || Ech.equals("k")) { Ech1Field.setText("C"); Ech2Field.setText("F"); //double Temp = Deg - 273.15; Temp.setNumber(Deg - 273.15); Res1Field.setText(TempConv.format(Temp.getNumber())); Temp.setNumber(0.0); Temp.setNumber((10*Deg)/18 - 290.94); Res2Field.setText(TempConv.format(Temp.getNumber())); MessageTexte.setText("Et voilà le travail (K)!"); } } } } } // catch (NumberFormatException ex) {} } class MyAdapter extends WindowAdapter { Frame myFrame; MyAdapter(Frame f) { super(); myFrame = f; } public void windowClosing(WindowEvent e) { myFrame.dispose(); } } Voilà ... C'est du code inspiré du code de maitre et de bouquin.. mias bon. On apprend que par mimétisme!! Merci encore. -------------------- Fan d'apple depuis ... 1987. Donc pas parmi les premiers, mais ça fait tout de même un moment. la vraie nouveauté, c'est ce qui ne vieillit pas malgré le temps. (Muriel Barbery) Membre n° 87 du club des AIPBP (Anciens Inscrits Pas Beaucoup de Posts) Voir la liste |
|
|
|
arnaudp Question static / pas static en java 31 Jan 2004, 18:54
Bac's Je pense que le problème vient du fait que la mé... 31 Jan 2004, 19:33
arnaudp J'ai fait le test et il n'est pas plus con... 31 Jan 2004, 19:43
mpergand Généralement cette erreur survient lorsque l... 31 Jan 2004, 21:06
arnaudp Merci pour vos explications...
Mais dans le code ... 1 Feb 2004, 09:39
mpergand Une petite recherche avec Google devrait te permet... 1 Feb 2004, 10:04
molgow Tu fais quoi à droite du "zeLayout =" .... 1 Feb 2004, 10:05
arnaudp QUOTE (mpergand @ 1 Feb 2004, 09:04)Une petit... 1 Feb 2004, 10:20
mpergand Les notions d'objet, classe, instance, subclas... 1 Feb 2004, 11:10
molgow QUOTE setLayout(new GridLayout(0, 3));
c'est ... 1 Feb 2004, 12:59
Bac's QUOTE (arnaudp @ 1 Feb 2004, 10:42)Cependant,... 1 Feb 2004, 17:09![]() ![]() |
| Nous sommes le : 4th April 2026 - 17:23 |