【问题标题】:Why is my JPanel not updating when I run the JPanel.setLocation(x,y) function inside of another function?当我在另一个函数中运行 JPanel.setLocation(x,y) 函数时,为什么我的 JPanel 没有更新?
【发布时间】:2013-08-27 03:58:10
【问题描述】:

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

让我从这个开始:我的目标是让 JPanel 在 JFrame 上滑动。为了让我知道,我尝试过这样的尝试:

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

有什么想法吗???

谢谢, 戴夫

【问题讨论】:

    标签: python swing jpanel jython repaint


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 2015-07-10
      相关资源
      最近更新 更多