JAVA

Swing ( Ⅱ )

choi121xx 2014. 9. 13. 07:56

 

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();

    }

}