将窗口分为上下两个区,分别运行两个线程,一个在上面的区域中显示由右向左游动的字符串,另一个在下面的区域中显示从左向右游动的字符串。
Several.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.GridLayout;
public class Several extends JFrame{
public Several(){
setSize(500,500); //调出个窗口大小
setLocation(400,400); //窗口的位置
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(2,1));
}
public static void main(String[] args) {
Several frame=new Several();
Panel1 first=new Panel1();
Panel2 second=new Panel2(); //main函数中创建两个线程
frame.add(first);
frame.add(second);
frame.setVisible(true); //调用frame对象
}
}
Panel1.java
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
class Panel1 extends JPanel implements Runnable{
int x1=0;
public Panel1(){
Thread t1=new Thread(this); //创建一个线程
t1.start(); //线程开始
}
public void run() {
while(true) {
try {
Thread.sleep(100); //使线程进行阻塞
}catch(InterruptedException e) {}
x1+=10;
if(x1>300)
x1=0;
repaint(); //结束时重新显示
}
}
public void paint(Graphics g1){
super.paint(g1);
g1.setColor(Color.RED); //红色
g1.drawString("这是第一行", x1, 20);
}
}
Panel2.java
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
/*第二个依次类推*/
class Panel2 extends JPanel implements Runnable{
int x2=300;
public Panel2() {
Thread t2=new Thread(this);
t2.start();
}
public void run() {
while(true) {
try {
Thread.sleep(100);
}catch(InterruptedException e) {}
x2-=10;
if(x2<-100)
x2=300;
repaint();
}
}
public void paint(Graphics g2){
super.paint(g2);
g2.setColor(Color.BLUE);
g2.drawString("这是第二行", x2, 40);
}
}