Как убрать мигание компонентов фрейма при его перерисовке? - Java
Формулировка задачи:
Добрый день, ув. программисты
Прошу помочь: увлеклась Java, начинаю с простого. Суть задачи: есть фрейм, на нем прорисовывается анимация. На этот фрейм нанесены компоненты класса JLabel. Чтобы эти элементы увидеть, я не нашла ничего лучше, чем постоянно их перерисовывать во время смены очередного кадра анимации фрейма В связи с чем проблема: эти самые компоненты время от времени мигают Подскажите, чтобы такого придумать, чтобы не мигало?
Спасибо заранее!
П.С. В коде привела тело основного класса (gain), а также фрейма и одного из Label.
public class gain { static addit addit; static additional additional; static Happy Happy; static pushMe pushMe; public static void main(String[] args) { pushMe=new pushMe(); pushMe.startThread(); addit=new addit(); addit.startThread(); additional=new additional(); additional.startThread(); Happy=new Happy(); Happy.startThread(); } } class Happy extends JFrame implements Runnable { Image[] img=new Image[8]; int i; Happy() { super(); this.setSize(496, 450); this.setLayout(null); this.setResizable(false); this.setLocation(300,100); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); } public void startThread() { Thread stream1 = new Thread(this); stream1.start(); } public void run() { this.add(gain.addit); this.add(gain.additional); this.add(gain.pushMe); MediaTracker tr = new MediaTracker(this); for ( i=0; i<8; i++ ) {img[i] = getToolkit().getImage(ResourceLoader.getImage("res/"+i+".png")); tr.addImage(img[i], 0); } try { tr.waitForAll();} catch(InterruptedException e) {} i=0; go();} public void paint(Graphics g) { g.drawImage(img[i], 0, 20, this); gain.pushMe.repaint(); if (addit.status==1) gain.addit.repaint(); else gain.additional.repaint(); } public void update(Graphics g) { paint(g); } public void go() { while(true) { while( i<8 ) { repaint(); try { Thread.sleep(350); i++;} catch (InterruptedException e) {} } i=0;} } } class addit extends JLabel implements Runnable { ImageIcon ico = new ImageIcon(ResourceLoader.getImage("res/button80.png")); action Action= new action(); static int status=0; BufferedImage buffer; public void rebuildBuffer(){ int w = getWidth(); int h = getHeight(); buffer = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = buffer.createGraphics(); } public void paintComponent(Graphics g) { super.paintComponent(g); if (buffer == null) { rebuildBuffer(); } g.drawImage(buffer, 0, 0, this); } public addit() { super(); this.setVisible(false); this.setLocation(220, 310); this.setSize(80, 80); try{ this.setIcon(ico); } catch (Exception e) {} this.addMouseListener(Action); } public void run() { this.waitBeforeStart(); while(true) { this.setVisible(true); status=1; this.waitMe(); this.setVisible(false); status=0; this.waitMe(); } } public void startThread() { Thread stream2 = new Thread(this); stream2.start(); } public void update(Graphics g) { paintComponent(g); } public void waitMe() { try { Thread.sleep(1000);} catch (InterruptedException e) {} } public void waitBeforeStart() { try { Thread.sleep(2000);} catch (InterruptedException e) {} } }
Решение задачи: «Как убрать мигание компонентов фрейма при его перерисовке?»
textual
Листинг программы
pushMe = new pushMe(); pushMe.startThread(); addit = new addit(); addit.startThread(); additional = new additional(); additional.startThread(); Happy = new Happy(); Happy.startThread();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д