2010-10-03 4 views
0

Je suis donc en train de jouer avec Jython, en essayant de créer une interface graphique générique. Rien de plus que ce qu'ils ont sur le Wiki Jython pour les exemples de swing. Je déclare donc un JFrame, puis j'essaie d'ajouter un panneau, des champs de texte, tout ce qu'il y a de mieux. Je reçois cette erreur quand je l'exécute, cependant. "L'objet 'NoneType' n'a pas d'attribut 'add'"Jython - tentative d'appel de fonctions à partir de JFrame, erreur 'NoneType'

Voici le code de base que j'ai.

from javax.swing import * 
frame = JFrame('E-mail Gathering', defaultCloseOperation = JFrame.EXIT_ON_CLOSE, size =(600,400), locationRelativeTo = None).setVisible(True) 
pnl = JPanel() 
frame.add(pnl) 
self.textfield1 = JTextField('username:',15) 
pnl.add(self.textfield1) 
self.textfield2 = JTextField('password:', 15) 
pnl.add(self.textfield2) 
mailButton = JButton('Login',actionPerformed=self.checkmail) 
pnl.add(mailButton) 
frame.pack() 
frame.setVisible(True) 

Je sais que la partie pertinente où il s'effondre est à « frame.add (pnl) » avec l'erreur mentionnée ci-dessus. Je pensais que je mettrais le reste là au cas où je commettrais des erreurs encore plus grandes. J'ai l'impression que quelque chose ne va pas lorsque je ne déclare pas correctement le cadre en JFrame, mais je sais que ce n'est pas le cas car cela crée très bien le cadre si je n'essaie pas d'y ajouter quoi que ce soit.

Merci pour vos conseils ou suggestions.

+0

Vous le savez probablement déjà, mais vous ne devriez pas utiliser 'from foo import *' sauf pour les raccourcis dans les scripts de jouets ou l'interprète. Et même alors, c'est sans doute une mauvaise idée. – katrielalex

+0

Je suis en fait un novice total, je n'avais aucune idée. Comment êtes-vous censé le mettre, et pourquoi est-ce que je le fais mal? – Nick

+0

N'importez que ce dont vous avez besoin pour éviter les collisions/ambiguïtés de noms, par exemple entre 'java.util.List' et' java.awt.List'. –

Répondre

1

Dans cette ligne:

frame = JFrame('E-mail Gathering', defaultCloseOperation = JFrame.EXIT_ON_CLOSE, size =(600,400), locationRelativeTo = None).setVisible(True) 

vous créez un JFrame, appelant sa méthode setVisible et attribuer la valeur de retour de setVisible à frame. setVisible doesn't return a value, donc frame est None. Cela provoque l'échec de frame.add.

Comme vous appelez setVisible à la fin de toute façon, et parce que vous ne voulez probablement pas de rendre le cadre visible avant d'avoir ajouté d'autres composants à et appelé pack, il suffit de retirer l'appel setVisible:

frame = JFrame('E-mail Gathering', defaultCloseOperation = JFrame.EXIT_ON_CLOSE, size =(600,400), locationRelativeTo = None) 
+0

Merci, je me sens si stupide de ne pas y penser. – Nick

+0

Vous êtes les bienvenus. Nous avons tous été dans cette situation! –

Questions connexes