2009-07-31 9 views
2

Jython 2.5Gestion des événements de discussion Swing avec Jython

J'essaie de lier une méthode à l'événement FocusGained d'un contrôle JText, mais tous les exemples que je trouve sont des exemples Java, Jython pas. Voici le code, je veux exécuter une méthode personnalisée lorsque chacun des gains de contrôle de texte mise au point (pour sélectionner tout le texte de la commande, par exemple)

from javax.swing import * 
from java.awt import * 

class Test(JFrame): 
    def __init__(self): 
     JFrame.__init__(self, 
         'JDesktopPane and JInternalFrame Demo', 
         size=(600, 300), 
         defaultCloseOperation=JFrame.EXIT_ON_CLOSE) 

     self.desktop = JDesktopPane() 
     self.contentPane.add(JScrollPane(self.desktop)) # This is the same as self.getContentPane().add(...) 

     frame = JInternalFrame("Frame", 1, 1, 1, 1, size=(400, 400), visible=1) 
     panel = JPanel() 

     self.label = JLabel('Hello from Jython') 
     panel.add(self.label) 

     self.textfield1 = JTextField('Type something here',15) 
     # self.textfield1.addFocusListener(event.FocusListener()) # ??? 

     panel.add(self.textfield1) 

     self.textfield2 = JTextField('and click Copy', 15) 
     panel.add(self.textfield2) 

     copyButton = JButton('Copy',actionPerformed=self.noAction) 
     panel.add(copyButton) 

     frame.add(panel) 
     frame.pack() 
     self.desktop.add(frame) 

     frame.setSelected(1) 
     frame.moveToFront() 

    def noAction (self, event): 
     pass 

if __name__ == '__main__': 
    test = Test() 
    test.setLocation(100, 100) 
    test.show() 

Répondre

1

Je voulais juste essayer de comprendre ce moi-même hier ... testé et travaux:

from javax.swing import * 
from java.awt import * 

class Test(JFrame): 
    def __init__(self): 
     JFrame.__init__(self, 
         'JDesktopPane and JInternalFrame Demo', 
         size=(600, 300), 
         defaultCloseOperation=JFrame.EXIT_ON_CLOSE) 

     self.desktop = JDesktopPane() 
     self.contentPane.add(JScrollPane(self.desktop)) # This is the same as self.getContentPane().add(...) 

     frame = JInternalFrame("Frame", 1, 1, 1, 1, size=(400, 400), visible=1) 
     panel = JPanel() 

     self.label = JLabel('Hello from Jython') 
     panel.add(self.label) 

     self.textfield1 = JTextField('Type something here',15,focusGained=self.myOnFocus) 


     panel.add(self.textfield1) 

     self.textfield2 = JTextField('and click Copy', 15) 
     panel.add(self.textfield2) 

     copyButton = JButton('Copy',actionPerformed=self.noAction) 
     panel.add(copyButton) 

     frame.add(panel) 
     frame.pack() 
     self.desktop.add(frame) 

     frame.setSelected(1) 
     frame.moveToFront() 

    def myOnFocus(self,event): 
     print "testing..." 

    def noAction (self, event): 
     pass 

if __name__ == '__main__': 
    test = Test() 
    test.setLocation(100, 100) 
    test.show() 
+0

Excellent, merci! – PabloG

1

Cool'n simple. Je vous remercie! Je pense que l'idiome est

{var} = {constructor}({param}, {event}={function}) 
tf = JTextField('1.23', focusLost=tf_focus_lost) 

Autre solution:

from java.awt.event import FocusListener 
class Enfoque(FocusListener): 
    '''Add dynamically''' 
# Left unimplemented 
# def focusGained(self, event): 
#  print 'tf_b Enfoque.focusGained' 

    def focusLost(self,event):  
     print 'tf_b Enfoque.focusLost' 

enf = Enfoque() 

tf_b = JTextField('2.34') 
tf_b.addFocusListener(enf) 
Questions connexes