Двойная буферизация в Jython

Недавно я начал изучать Jython, и теперь у меня довольно простая проблема. Я хочу улучшить качество своей анимации. К сожалению, я не знаю, как добавить в свой апплет двойную буферизацию. Не могли бы вы помочь мне? С наилучшими пожеланиями!

from javax.swing import JToolBar
from javax.swing import JButton
from javax.swing import JFrame
import time
from java import awt 
from java.awt import BorderLayout


class Canvas(awt.Canvas): 
    u"Canvas - drawing area"
    def __init__(self,winSize = 400): 
        self.play = False
        self.background=awt.Color.black 
        self.winSize = winSize
        self.l = 0
    def playSim(self, play):
        if play == True: 
            self.play = True
            self.repaint()
        else: self.play = False
    def paint(self, g):    
        g.fillRect(50, int(self.winSize/4), self.l, int(self.winSize/2))
        if self.l < self.winSize: self.l += 1
        else: self.l = 0
        time.sleep(0.02)
        if self.play == True: self.repaint()


class Example(JFrame):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        winSize = 600
        toolbar = JToolBar()
        self.playButton = JButton("Start", actionPerformed=self.playButtonPress )
        toolbar.add(self.playButton)
        self.add(toolbar, BorderLayout.NORTH)

        self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        self.setSize(winSize, winSize)
        self.setResizable(False)
        self.setLocationRelativeTo(None)
        self.setVisible(True)
        self.canvas = Canvas(winSize)
        self.getContentPane().add(self.canvas)  
        self.setTitle("TEST")
        self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

    def playButtonPress(self, e):
        if self.playButton.getLabel() == "Start": 
            self.canvas.playSim(True)
            self.playButton.setLabel("Stop")
        else: 
            self.playButton.setLabel("Start")
            self.canvas.playSim(False)

if __name__ == '__main__':
    Example()

person Tayta Inti    schedule 09.04.2013    source источник
comment
Пожалуйста, укажите, какие исследования вы провели и почему они не помогают. Например. применима stackoverflow.com/questions/581085/, или этот звонок недоступен?   -  person TheDuke    schedule 10.04.2013


Ответы (1)


Я решил свою недавнюю проблему:

from javax.swing import JToolBar
from javax.swing import JButton
from javax.swing import JFrame
import time
from java import awt 
from java.awt import BorderLayout


class Canvas(awt.Canvas): 
    u"Canvas - drawing area"
    def __init__(self,winSize = 400): 
        self.play = False
        self.background=awt.Color.black 
        self.winSize = winSize
        self.l = 0
        self.bi = BufferedImage(winSize, winSize, BufferedImage.TYPE_INT_RGB)
        self.offScreenGraphics = self.bi.getGraphics()
    def playSim(self, play):
        if play == True: 
            self.play = True
            self.repaint()
        else: self.play = False
    def paint(self, g):    
        self.offScreenGraphics.fillRect(50, int(self.winSize/4), self.l, int(self.winSize/2))
        if self.l < self.winSize: self.l += 1
        else: self.l = 0
        g.drawImage(self.bi, 0, 0, None)
        time.sleep(0.02)
        if self.play == True: self.repaint()


class Example(JFrame):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        winSize = 600
        toolbar = JToolBar()
        self.playButton = JButton("Start", actionPerformed=self.playButtonPress )
        toolbar.add(self.playButton)
        self.add(toolbar, BorderLayout.NORTH)

        self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        self.setSize(winSize, winSize)
        self.setResizable(False)
        self.setLocationRelativeTo(None)
        self.setVisible(True)
        self.canvas = Canvas(winSize)
        self.getContentPane().add(self.canvas)  
        self.setTitle("TEST")
        self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

    def playButtonPress(self, e):
        if self.playButton.getLabel() == "Start": 
            self.canvas.playSim(True)
            self.playButton.setLabel("Stop")
        else: 
            self.playButton.setLabel("Start")
            self.canvas.playSim(False)

if __name__ == '__main__':
    Example()

Теперь у меня есть другая (довольно тривиальная) проблема: как я могу сделать из этого файла Python * файл класса *, который был бы готов опубликовать его на веб-сайте в виде апплета?

person Tayta Inti    schedule 27.04.2013