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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д