2013-08-27 46 views
0

所以我一直在這一段時間了。我的揮杆技巧並不差,但現在我似乎失去了一些東西。我最近一直在使用Jython進行試驗,我一直在使用Jython腳本中的swing包。當我在另一個函數內部運行JPanel.setLocation(x,y)函數時,爲什麼我的JPanel沒有更新?

讓我從這開始:我的目標是讓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() 

但是,當我稍微增加更多的複雜性的事件,它沒有任何反應都沒有。沒有更新,重新粉刷或任何東西: 從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() 

任何想法從java.awt中導入* javax.swing中導入* ???

謝謝, 戴夫

回答

0

循環阻塞事件調度線程,所以沒有事件或圖紙進行處理。使用鞦韆Timer進行滑動。該文檔是爲Java,但希望不太難以翻譯爲Python。

相關問題