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

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

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

Вообщем есть код простой бегущей строки сделанной в JFrame, все работает, но только одно но, если запустить программу то самой строки не видно пока мы не развернем окошко во весь экран, только тогда она появляется. Хотелось бы знать причину и как это исправить.
package Thread;
 
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.*;
 
public class PrintMain extends Canvas implements Runnable{
    int x = 300, y = 20, startX = x;
    public static void main(String args[]){
      final PrintMain tm = new PrintMain();
      JFrame jr = new JFrame();
      jr.setSize(600,200);
      jr.setBackground(Color.gray);
      jr.setLocationRelativeTo(null);
      jr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      jr.setVisible(true);
 
      JButton b1 = new JButton("Старт");
      b1.setLayout(null);
      b1.setLocation(20, 10);
      b1.setSize(100, 50);
      b1.addActionListener(new ActionListener(){
 
        public void actionPerformed(ActionEvent e) {
            tm.start();
            
        }
          
      });
      jr.add(b1);
      jr.add(tm);
  
    }
    
    public void start(){
     Thread t = new Thread(this);
     t.start();
    }
    
    public void paint(Graphics g){
      g.drawString("Text", x, y);
    }

    public void run() {
     while(true){
         x = x + 1;
         try{Thread.sleep(10);}catch(Exception e){}
         if (x>=400){
          x = startX;
         }
         repaint();
     }
    }
 
}

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

textual
Листинг программы
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class PrintMain extends JFrame implements Runnable {
 
    private int x = 20;
    private int y = 20;
    private int startX = x;
    private MyCanvas canvas;
 
    private class MyCanvas extends JPanel {
 
        public MyCanvas() {
            setDoubleBuffered(true);
        }
 
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawString("Hello world", x, y);
        }
    }
 
    public PrintMain() {
        setSize(600, 200);
        setBackground(Color.gray);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        canvas = new MyCanvas();
        JButton b1 = new JButton("Старт");
        b1.setLayout(null);
        b1.setLocation(20, 10);
        b1.setSize(100, 50);
        b1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                start();
            }
        });
        add(b1, BorderLayout.SOUTH);
        add(canvas, BorderLayout.CENTER);
    }
 
    public static void main(String args[]) {
        PrintMain pm = new PrintMain();
        pm.setVisible(true);
    }
 
    public void start() {
        Thread t = new Thread(this);
        t.start();
    }
 
    public void run() {
        while (true) {
            x = x + 1;
            try {
                Thread.sleep(8);
            } catch (Exception e) {
            }
            if (x >= canvas.getWidth() - 100) {
                x = startX;
            }
            canvas.repaint();
        }
    }
}

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


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

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

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