Swing ( Ⅱ )
1.
ex> Test01_Time.java
현재 시간을 thread로 구현해 보여준다.
package test01.thread;
import java.awt.BorderLayout;
import java.util.Calendar;
import javax.swing.JFrame;
import javax.swing.JLabel;
class MyFrame01 extends JFrame{
JLabel lbl=new JLabel("현재시각:");
public MyFrame01() {
setLayout(new BorderLayout());
add(lbl,BorderLayout.NORTH);
setSize(300,300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
class TimeThread extends Thread{
public void run(){
while(true){
//현재시간에 대한 정보를 갖는 객체 얻어오기
Calendar cal=Calendar.getInstance();
//현재시간얻어오기
String str="현재시간:" +
cal.get(Calendar.HOUR_OF_DAY)+"시" +
cal.get(Calendar.MINUTE)+"분" +
cal.get(Calendar.SECOND)+"초";
//현재시간을 JLabel에 출력하기
lbl.setText(str);
try{
Thread.sleep(1000);
}catch(InterruptedException ue){
System.out.println(ue.getMessage());
}
}
}
}
//현재시간을 얻어와 lbl에 출력하는 스레드 실행하기
TimeThread thread=new TimeThread();
thread.start();
}
}
public class Test01_Time{
public static void main(String[] args) {
new MyFrame01();
}
}
2.
Runnable를 implements 하여 사용한 예>
ex>Test02_Time.java
package test01.thread;
import java.awt.BorderLayout;
import java.util.Calendar;
import javax.swing.JFrame;
import javax.swing.JLabel;
class MyFrame02 extends JFrame implements Runnable{
JLabel lbl=new JLabel("현재시각:");
public MyFrame02() {
setLayout(new BorderLayout());
add(lbl,BorderLayout.NORTH);
setSize(300,300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//Runnable객체생성
//Thread객체의 생성자인자로 Runnable넣기
Thread th=new Thread(this);
//start()호출
th.start();
}
@Override
public void run(){
while(true){
//현재시간에 대한 정보를 갖는 객체 얻어오기
Calendar cal=Calendar.getInstance();
//현재시간얻어오기
String str="현재시간:" +
cal.get(Calendar.HOUR_OF_DAY)+"시" +
cal.get(Calendar.MINUTE)+"분" +
cal.get(Calendar.SECOND)+"초";
//현재시간을 JLabel에 출력하기
lbl.setText(str);
try{
Thread.sleep(1000);
}catch(InterruptedException ue){
System.out.println(ue.getMessage());
}
}
}
}
public class Test02_Time{
public static void main(String[] args) {
new MyFrame02();
}
}
3.
ex> Test03_Time.java
날짜, 시간 보여주기
package test01.thread;
import java.awt.BorderLayout;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JLabel;
class TimeThread extends Thread{
MyFrame03 frm;
public TimeThread(MyFrame03 frm){
this.frm=frm;
}
public void run(){
while(true){
Date d=new Date();
//날짜의 출력형식을 지정할 수 있는 객체 생성
// SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat sd=new SimpleDateFormat("yyyy년MM월dd일");
SimpleDateFormat st=new SimpleDateFormat("hh시mm분ss초");
String strTime=st.format(d);
String strDate=sd.format(d);
//현재시간을 JLabel에 출력하기
frm.lblTime.setText("현재시간:"+strTime);
frm.lblDate.setText("오늘날짜:"+strDate);
try{
Thread.sleep(1000);
}catch(InterruptedException ue){
System.out.println(ue.getMessage());
}
}
}
}
class MyFrame03 extends JFrame{
JLabel lblTime=new JLabel("현재시각:");
JLabel lblDate=new JLabel("오늘날짜:");
public MyFrame03() {
setLayout(new BorderLayout());
add(lblTime,BorderLayout.NORTH);
add(lblDate,BorderLayout.SOUTH);
setSize(300,300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
new TimeThread(this).start();
}
}
public class Test03_Time {
public static void main(String[] args) {
new MyFrame03();
}
}
4.
ex> 이미지 3개 경주 게임.
package test01.thread;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
class MyFrame04 extends JFrame implements ActionListener{
//이미지아이콘 객체 3개 생성하기
JLabel img1=new JLabel(new ImageIcon("dog1.jpg"));
JLabel img2=new JLabel(new ImageIcon("dog2.jpg"));
JLabel img3=new JLabel(new ImageIcon("dog3.jpg"));
JButton btn1=new JButton("출발");
int rank=0;
public MyFrame04() {
//레이아웃매니져사용안하기
setLayout(null);
//이미지 x축좌표,y축좌표,가로길이,세로길이 설정하기
img1.setBounds(10,50,50,50);
img2.setBounds(10,110,50,50);
img3.setBounds(10,170,50,50);
//버튼 좌표와 크기 설정하기
btn1.setBounds(10,250,100,30);
//이미지와 버튼 프레임에 붙이기
add(img1);
add(img2);
add(img3);
add(btn1);
//버튼에 이벤트리스너 등록하기
btn1.addActionListener(this);
setSize(700,400);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
img1.setLocation(10,50);
img2.setLocation(10,110);
img3.setLocation(10,170);
//이미지를 이동하는 스레드 실행하기
new ImgMoveThread(img1).start();
new ImgMoveThread(img2).start();
new ImgMoveThread(img3).start();
}
class ImgMoveThread extends Thread{
JLabel img;
//생성자 인자로 이동시킬 이미지에 대한 참조값 얻어오기
public ImgMoveThread(JLabel img){
this.img=img;
}
public void run(){
Random rnd=new Random();
while(true){
//이동될 x좌표 구하기
int moveX=img.getX()+rnd.nextInt(30);
//이미지 이동시키기
img.setLocation(moveX,img.getY());
if(img.getX()>=600){
rank++;
img.setLocation(600,img.getY());
img.setToolTipText("등수:" + rank +"!!!");
break;
}
try{
Thread.sleep(200);
}catch(InterruptedException ie){
System.out.println(ie.getMessage());
}
}
}
}
}
public class Test04_ImgMove{
public static void main(String[] args) {
new MyFrame04();
}
}