Обработка событий Swing focus с помощью Jython - PullRequest
2 голосов
/ 31 июля 2009

Jython 2.5

Я пытаюсь привязать метод к событию focusGained элемента управления JText, но все примеры, которые я нашел, являются примерами Java, а не Jython. Вот код, я хочу запустить собственный метод, когда каждый текстовый элемент управления получает фокус (например, для выделения всего текста элемента управления)

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()

Ответы [ 2 ]

1 голос
/ 13 июля 2011

Круто, просто. Спасибо! Я думаю, что идиома это

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

Другая альтернатива:

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)
1 голос
/ 31 июля 2009

Я просто пытался понять это вчера сам ... проверено и работает:

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()
...