JFrame и бегущая строка - Java

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

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

Вообщем есть код простой бегущей строки сделанной в JFrame, все работает, но только одно но, если запустить программу то самой строки не видно пока мы не развернем окошко во весь экран, только тогда она появляется. Хотелось бы знать причину и как это исправить.
Листинг программы
  1. package Thread;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import javax.swing.*;
  6. public class PrintMain extends Canvas implements Runnable{
  7. int x = 300, y = 20, startX = x;
  8. public static void main(String args[]){
  9. final PrintMain tm = new PrintMain();
  10. JFrame jr = new JFrame();
  11. jr.setSize(600,200);
  12. jr.setBackground(Color.gray);
  13. jr.setLocationRelativeTo(null);
  14. jr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  15. jr.setVisible(true);
  16. JButton b1 = new JButton("Старт");
  17. b1.setLayout(null);
  18. b1.setLocation(20, 10);
  19. b1.setSize(100, 50);
  20. b1.addActionListener(new ActionListener(){
  21. public void actionPerformed(ActionEvent e) {
  22. tm.start();
  23. }
  24. });
  25. jr.add(b1);
  26. jr.add(tm);
  27. }
  28. public void start(){
  29. Thread t = new Thread(this);
  30. t.start();
  31. }
  32. public void paint(Graphics g){
  33. g.drawString("Text", x, y);
  34. }
  35.  
  36. public void run() {
  37. while(true){
  38. x = x + 1;
  39. try{Thread.sleep(10);}catch(Exception e){}
  40. if (x>=400){
  41. x = startX;
  42. }
  43. repaint();
  44. }
  45. }
  46. }

Решение задачи: «JFrame и бегущая строка»

textual
Листинг программы
  1. import java.awt.BorderLayout;
  2. import java.awt.Color;
  3. import java.awt.Graphics;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import javax.swing.JButton;
  7. import javax.swing.JFrame;
  8. import javax.swing.JPanel;
  9.  
  10. public class PrintMain extends JFrame implements Runnable {
  11.  
  12.     private int x = 20;
  13.     private int y = 20;
  14.     private int startX = x;
  15.     private MyCanvas canvas;
  16.  
  17.     private class MyCanvas extends JPanel {
  18.  
  19.         public MyCanvas() {
  20.             setDoubleBuffered(true);
  21.         }
  22.  
  23.         @Override
  24.         protected void paintComponent(Graphics g) {
  25.             super.paintComponent(g);
  26.             g.drawString("Hello world", x, y);
  27.         }
  28.     }
  29.  
  30.     public PrintMain() {
  31.         setSize(600, 200);
  32.         setBackground(Color.gray);
  33.         setLocationRelativeTo(null);
  34.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  35.         setLayout(new BorderLayout());
  36.         canvas = new MyCanvas();
  37.         JButton b1 = new JButton("Старт");
  38.         b1.setLayout(null);
  39.         b1.setLocation(20, 10);
  40.         b1.setSize(100, 50);
  41.         b1.addActionListener(new ActionListener() {
  42.             public void actionPerformed(ActionEvent e) {
  43.                 start();
  44.             }
  45.         });
  46.         add(b1, BorderLayout.SOUTH);
  47.         add(canvas, BorderLayout.CENTER);
  48.     }
  49.  
  50.     public static void main(String args[]) {
  51.         PrintMain pm = new PrintMain();
  52.         pm.setVisible(true);
  53.     }
  54.  
  55.     public void start() {
  56.         Thread t = new Thread(this);
  57.         t.start();
  58.     }
  59.  
  60.     public void run() {
  61.         while (true) {
  62.             x = x + 1;
  63.             try {
  64.                 Thread.sleep(8);
  65.             } catch (Exception e) {
  66.             }
  67.             if (x >= canvas.getWidth() - 100) {
  68.                 x = startX;
  69.             }
  70.             canvas.repaint();
  71.         }
  72.     }
  73. }

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


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

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

15   голосов , оценка 3.733 из 5

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

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

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