2013-08-27 1 views
0

Так что я был на это какое-то время. Мои навыки качания неплохие, но сейчас я, кажется, что-то упускаю. Я экспериментировал с Jython совсем недавно, и я использовал пакет swing из сценария Jython.Почему мой JPanel не обновляется, когда я запускаю функцию JPanel.setLocation (x, y) внутри другой функции?

Позвольте мне начать с этого: моя цель - сделать слайд 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() 

Любые идеи ???

Спасибо, Dave

ответ

0

блоки петли событие отправки потока, поэтому никаких событий или рисунок не может быть обработан. Используйте качели Timer для скользящего. Документация предназначена для java, но, надеюсь, не слишком сложно перевести на python.

Смежные вопросы