为什么当我在另一个函数中运行JPanel.setLocation(x,y)函数时,我的JPanel没有更新



所以我已经做了一段时间了。我的挥杆技术还不错,但现在我似乎错过了一些东西。我最近一直在尝试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()

但是,当我对事件增加一点复杂性时,它根本没有反应。没有更新、重新喷漆或其他任何事情:从javax.swing导入*从java.awt导入*从java.awt.event导入*导入时间

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

有什么想法吗???

谢谢,Dave

循环阻塞事件调度线程,因此无法处理任何事件或绘图。使用摆动计时器进行滑动。文档是针对java的,但希望翻译成python不会太难。

最新更新