0

所以我已经有一段时间了。我的挥杆技术还不错,但现在我似乎缺少了一些东西。我最近一直在尝试使用 Jython,并且一直在使用 Jython 脚本中的 swing 包。

让我从这个开始:我的目标是在 JFrame 上制作一个 JPanel 幻灯片。为了保持我的知识,我尝试尝试这样的事情:

    x = 0
    while panel.getX() < frame.getWidth():
        print "panel.getX(): %i" % panel.getX()
        panel.setLocation(x,0)
        x += 5
        time.sleep(0.01)

但这是我困惑的要点......我在我的代码中运行了它,它完全符合我的要求。JPanel 滑过 JFrame,我可以看到它这样做了:

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

    f = JFrame()
    p = JPanel()
    p.setPreferredSize(Dimension(300,300))

    def slide():
        x = 0
        while p.getX() < f.getWidth():
            print "p.getX(): %i" % p.getX()
            p.setLocation(x,0)
            x += 5
            time.sleep(0.5)
    p.add(JLabel("hi"))
    f.getContentPane().add(p)
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
    f.setVisible(True)
    f.pack()
    slide()

但是,当我为事件添加更多复杂性时,它根本没有反应。没有更新、重绘或任何东西:from javax.swing import * from java.awt import * from java.awt.event import * import time

    f = JFrame()
    p = JPanel()
    p.setPreferredSize(Dimension(300,300))

    def slide(event):
        x = 0
        while p.getX() < f.getWidth():
            print "p.getX(): %i" % p.getX()
            p.setLocation(x,0)
            x += 5
            time.sleep(0.5)
    b = JButton(actionPerformed=slide)
    p.add(JLabel("hi"))
    f.getContentPane().setLayout(BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS))
    f.getContentPane().add(p)
    f.getContentPane().add(b)
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
    f.setVisible(True)
    f.pack()

有任何想法吗???

谢谢,戴夫

4

1 回答 1

0

循环阻塞了事件调度线程,因此不能处理任何事件或绘图。使用摇摆计时器进行滑动。该文档适用于 java,但希望翻译成 python 不会太难。

于 2013-08-27T07:25:37.193 回答