Как убрать мигание компонентов фрейма при его перерисовке? - Java

Узнай цену своей работы

Формулировка задачи:

Добрый день, ув. программисты Прошу помочь: увлеклась Java, начинаю с простого. Суть задачи: есть фрейм, на нем прорисовывается анимация. На этот фрейм нанесены компоненты класса JLabel. Чтобы эти элементы увидеть, я не нашла ничего лучше, чем постоянно их перерисовывать во время смены очередного кадра анимации фрейма В связи с чем проблема: эти самые компоненты время от времени мигают Подскажите, чтобы такого придумать, чтобы не мигало? Спасибо заранее! П.С. В коде привела тело основного класса (gain), а также фрейма и одного из Label.
Листинг программы
  1. public class gain {
  2. static addit addit;
  3. static additional additional;
  4. static Happy Happy;
  5. static pushMe pushMe;
  6. public static void main(String[] args) {
  7. pushMe=new pushMe();
  8. pushMe.startThread();
  9. addit=new addit();
  10. addit.startThread();
  11. additional=new additional();
  12. additional.startThread();
  13. Happy=new Happy();
  14. Happy.startThread(); } }
  15. class Happy extends JFrame implements Runnable {
  16. Image[] img=new Image[8];
  17. int i;
  18. Happy() {
  19. super();
  20. this.setSize(496, 450);
  21. this.setLayout(null);
  22. this.setResizable(false);
  23. this.setLocation(300,100);
  24. this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  25. this.setVisible(true); }
  26. public void startThread() {
  27. Thread stream1 = new Thread(this);
  28. stream1.start(); }
  29. public void run() {
  30. this.add(gain.addit);
  31. this.add(gain.additional);
  32. this.add(gain.pushMe);
  33. MediaTracker tr = new MediaTracker(this);
  34. for ( i=0; i<8; i++ )
  35. {img[i] = getToolkit().getImage(ResourceLoader.getImage("res/"+i+".png"));
  36. tr.addImage(img[i], 0); }
  37. try {
  38. tr.waitForAll();}
  39. catch(InterruptedException e) {}
  40. i=0;
  41. go();}
  42. public void paint(Graphics g) {
  43. g.drawImage(img[i], 0, 20, this);
  44. gain.pushMe.repaint();
  45. if (addit.status==1)
  46. gain.addit.repaint();
  47. else gain.additional.repaint(); }
  48. public void update(Graphics g) {
  49. paint(g); }
  50. public void go() {
  51. while(true) {
  52. while( i<8 ) {
  53. repaint();
  54. try {
  55. Thread.sleep(350);
  56. i++;}
  57. catch (InterruptedException e) {} }
  58. i=0;} } }
  59.  
  60. class addit extends JLabel implements Runnable {
  61. ImageIcon ico = new ImageIcon(ResourceLoader.getImage("res/button80.png"));
  62. action Action= new action();
  63. static int status=0;
  64. BufferedImage buffer;
  65. public void rebuildBuffer(){
  66. int w = getWidth();
  67. int h = getHeight();
  68. buffer = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
  69. Graphics2D g2d = buffer.createGraphics(); }
  70. public void paintComponent(Graphics g) {
  71. super.paintComponent(g);
  72. if (buffer == null) {
  73. rebuildBuffer(); }
  74. g.drawImage(buffer, 0, 0, this); }
  75. public addit() {
  76. super();
  77. this.setVisible(false);
  78. this.setLocation(220, 310);
  79. this.setSize(80, 80);
  80. try{
  81. this.setIcon(ico);
  82. } catch (Exception e) {}
  83. this.addMouseListener(Action); }
  84. public void run() {
  85. this.waitBeforeStart();
  86. while(true) {
  87. this.setVisible(true);
  88. status=1;
  89. this.waitMe();
  90. this.setVisible(false);
  91. status=0;
  92. this.waitMe(); } }
  93. public void startThread() {
  94. Thread stream2 = new Thread(this);
  95. stream2.start(); }
  96. public void update(Graphics g) {
  97. paintComponent(g); }
  98. public void waitMe() {
  99. try {
  100. Thread.sleep(1000);}
  101. catch (InterruptedException e) {} }
  102. public void waitBeforeStart() {
  103. try {
  104. Thread.sleep(2000);}
  105. catch (InterruptedException e) {} } }

Решение задачи: «Как убрать мигание компонентов фрейма при его перерисовке?»

textual
Листинг программы
  1.         pushMe = new pushMe();
  2.         pushMe.startThread();
  3.         addit = new addit();
  4.         addit.startThread();
  5.         additional = new additional();
  6.         additional.startThread();
  7.         Happy = new Happy();
  8.         Happy.startThread();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.308 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы