이클립스상에 UTF-8 설정>


메뉴 window

      - preference

         - web

            - CSS Files : Encoding --> IOS ..utf-8로 변경.( 맨위에 있는 설정 )

            - HTML Files: Encoding --> IOS ..utf-8로 변경.

            - JSP Files : Encoding --> IOS ..utf-8로 변경.


        - General

            - Content Type

                  - Text 

                     - Javascript Source File 밑에 Default encoding 에 UTF-8 로 UPDATE 하기.

 

 

'JAVA' 카테고리의 다른 글

Swing ( Ⅲ )  (0) 2014.09.13
Swing ( Ⅱ )  (0) 2014.09.13
Swing ( Ⅰ )  (0) 2014.09.13
내부클래스(inner class) / 로컬 내부 클래스 / static 내부 클래스 / 익명의 내부클래스 / url  (0) 2014.09.13
멀티 채팅 샘플  (0) 2014.09.13

 

1. JMenu



ex> Test01_JMenu.java


메뉴생성 및 메뉴의 책상을 누르면 해당 색상으로 바탕화면 변경.

package test02;

import java.awt.Color;

import java.awt.Container;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;


class MyFrame01 extends JFrame implements ActionListener{

    JMenuBar bar=new JMenuBar();

    JMenu menu1=new JMenu("파일");

    JMenu menu2=new JMenu("편집");

    JMenuItem item1=new JMenuItem("빨강");

    JMenuItem item2=new JMenuItem("파랑");

    JMenuItem item3=new JMenuItem("노랑");

    JMenuItem item4=new JMenuItem("종료");

    Container con;

    public MyFrame01(){

        con=getContentPane();

        

        //프레임에 메뉴바 붙이기

        setJMenuBar(bar);


        //메뉴바에 메뉴붙이기

        bar.add(menu1);

        bar.add(menu2);


        //메뉴에 하위메뉴(메뉴아이템)붙이기

        menu1.add(item1);

        menu1.add(item2);

        menu1.add(item3);

        menu1.add(item4);

        

        //메뉴아이템에 이벤트리스너 등록하기

        item1.addActionListener(this);

        item2.addActionListener(this);

        item3.addActionListener(this);

        item4.addActionListener(this);

        

        setSize(400,400);

        setVisible(true);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    @Override

    public void actionPerformed(ActionEvent e){

        if(e.getSource()==item1){

            con.setBackground(Color.RED);

        }else if(e.getSource()==item2){

            con.setBackground(Color.BLUE);

        }else if(e.getSource()==item3){

            con.setBackground(Color.YELLOW);

        }else if(e.getSource()==item4){

            System.exit(0);

        }

    }

}

public class Test01_JMenu{

    public static void main(String[] args) {

        new MyFrame01();

    }

}

 


 

 






2. JList



ex> Test02_JList.java

package test02;

import java.awt.BorderLayout;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JList;

class MyFrame02 extends JFrame{

    JList<String> list;

    JComboBox<String> combo;


    public MyFrame02() {

        setLayout(new BorderLayout());

        

        String[] slist={"홍길동","김철수","이영희"};

        list=new JList<String>(slist);

        String[] part={"영업부","생산부"};

        combo=new JComboBox<String>(part);

        

        add(combo,BorderLayout.NORTH);

        add(list,BorderLayout.CENTER);

        

        setSize(400,400);

        setVisible(true);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

}

public class Test02_JList{

    public static void main(String[] args) {

        new MyFrame02();

    }

}


 


 





ex> Test03_JList.java

추가 버튼으로 입력한 내용을 추가한다. (삭제)

package test02;

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import javax.swing.DefaultListModel;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextField;

class MyFrame03 extends JFrame implements ActionListener{

    JTextField txt=new JTextField(15);

    JButton btnAdd=new JButton("추가");

    JButton btnDel=new JButton("삭제");

    JPanel pan=new JPanel();

    JList<String> list;


    //JList와 연결될 모델객체 생성하기

    DefaultListModel<String> model=new DefaultListModel<>();


    public MyFrame03() {

        setLayout(new BorderLayout());

        pan.add(txt);

        pan.add(btnAdd);

        pan.add(btnDel);

        

        model.addElement("홍길동");

        model.addElement("홍길서");

        model.addElement("홍길남");

        model.addElement("홍길북");


        //모델객체와 연결된 JList생성하기

        list=new JList<String>(model);

        

        add(pan,BorderLayout.NORTH);

        add(new JScrollPane(list),BorderLayout.CENTER);

        

        btnAdd.addActionListener(this);

        btnDel.addActionListener(this);

        

        //텍스트필드에 키보드로 키값을 누를때마다 이를 감지하는 이벤트 리스너 등록

        txt.addKeyListener(new KeyAdapter(){

            public void keyPressed(KeyEvent e){

                //누른 키값 얻어오기

                int keyCode=e.getKeyCode();

                //누른 키가 엔터키인경우

                if(keyCode==KeyEvent.VK_ENTER){

                    addData();//입력된 문자열을 Model객체에 추가하기

                }

            }

        });

        setSize(400,400);

        setVisible(true);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    @Override

    public void actionPerformed(ActionEvent e) {

        //추가버튼을 누른경우

        if(e.getSource()==btnAdd){

            addData();


        }else if(e.getSource()==btnDel){

        //삭제버튼을 누른 경우

            //선택된 인덱스번호 얻어오기

            int index=list.getSelectedIndex();

            //선택한 항목이 없는 경우

            if(index==-1){

                JOptionPane.showMessageDialog(this,"삭제할 항목을 선택하세요!");

                return;//메소드 끝내기

            }else{

                //선택한 항목 얻어오기

                String value=list.getSelectedValue();


                //부모컴포넌트, 보여줄메시지, 타이틀,  버튼형태

                int btn=JOptionPane.showConfirmDialog(this,

                        value+"님을 정말로 삭제할까요?",

                        "삭제",

                        JOptionPane.YES_NO_OPTION

                        );


                //아니오 버튼을 누른 경우

                if(btn==JOptionPane.NO_OPTION){

                    return;

                }

            }

            //해당 인덱스데이터를 Model에서 삭제하기

            model.remove(index);

        }

    }

    private void addData(){

        //입력된 문자열 얻어오기

        String str=txt.getText();


        //데이터 추가는 Model객체에 해야 함

        model.addElement(str);


        txt.setText("");

        txt.requestFocus();

    }

}

public class Test03_JList{

    public static void main(String[] args) {

        new MyFrame03();

    }

}


 


 





3. JTable



ex> Test04_JTable.java


package test02;

import java.awt.BorderLayout;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTable;

class MyFrame04 extends JFrame{

    JTable tb;


    public MyFrame04() {

        setLayout(new BorderLayout());


        //JTable(Object[][] rowData, Object[] columnNames)

        String[][] rowData={

             {"홍길동","010-111-1234","경기도"},

             {"홍길서","010-222-3333","서울"},

             {"홍길남","010-333-4567","노원구"},

             {"홍길북","010-444-9876","경기도"}};

        String colNames[]={"이름","전화번호","주소"};


        //JTable생성

        tb=new JTable(rowData,colNames);

        

        //JTable을 Center영역에 붙이기

        add(new JScrollPane(tb),BorderLayout.CENTER);

        

        setSize(500,500);

        setVisible(true);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

}

public class Test04_JTable{

    public static void main(String[] args) {

        new MyFrame04();

    }

}


 


 




ex> Test05_JTable.java


package test02;

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Vector;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JList;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.JTextField;

import javax.swing.table.DefaultTableModel;


class MyFrame05 extends JFrame implements ActionListener{

    JTextField txtName=new JTextField(5);

    JTextField txtPhone=new JTextField(5);

    JTextField txtAddr=new JTextField(10);

    JPanel pan=new JPanel();

    JButton btnAdd=new JButton("추가");

    JButton btnDel=new JButton("삭제");

    JTable tb;

    DefaultTableModel model;


    public MyFrame05() {

        setLayout(new BorderLayout());

        pan.add(new JLabel("이름"));

        pan.add(txtName);

        pan.add(new JLabel("전화"));

        pan.add(txtPhone);

        pan.add(new JLabel("주소"));

        pan.add(txtAddr);

        pan.add(btnAdd);

        pan.add(btnDel);


        //public DefaultTableModel(Vector columnNames, int rowCount)

        //컬럼명을 Vector에 저장하기

        Vector<String> cols=new Vector<String>();

        cols.add("이름");

        cols.add("전화");

        cols.add("주소");


        //JTable과 연결될 모델객체 생성

        model=new DefaultTableModel(cols,0);


        //model객체와 연결되는 JTable생성

        tb=new JTable(model);

        

        add(pan,BorderLayout.NORTH);

        add(new JScrollPane(tb),BorderLayout.CENTER);

        

        //버튼에 이벤트리스너등록하기

        btnAdd.addActionListener(this);

        btnDel.addActionListener(this);

        

        setSize(500,500);

        setVisible(true);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    @Override

    public void actionPerformed(ActionEvent e) {

        // 추가버튼을 누른경우

        if(e.getSource()==btnAdd){

            //입력된 데이터 얻어오기

            String name=txtName.getText();

            String phone=txtPhone.getText();

            String addr=txtAddr.getText();

            

            //모델객체에 데이터 추가하기

            String []rows={name,phone,addr};

            model.addRow(rows);

        }else if(e.getSource()==btnDel){

            //선택한 행번호 얻어오기

            int index=tb.getSelectedRow();

            

            //선택한 행이 없는 경우

            if(index==-1){

                JOptionPane.showMessageDialog(this,"삭제할 회원 선택!");

                return;

            }

            //삭제는 Model객체에서 해야 함!

            model.removeRow(index);

        }

    }

}

public class Test05_JTable{

    public static void main(String[] args) {

        new MyFrame05();

    }

}

 

 

 

 






4. JDialog



ex> Test06_Dlg.java

로그인 버튼 - 로그인 팝업 창 오픈 - 아이디/비번 입력 체크

package test02;

import java.awt.FlowLayout;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JTextField;


class MyFrame06 extends JFrame implements ActionListener{

    JButton btn1=new JButton("로그인");

    JLabel lbl=new JLabel();


    public MyFrame06() {

        setLayout(new FlowLayout());

        add(btn1);

        add(lbl);

        btn1.addActionListener(this);

        setSize(500,500);

        setVisible(true);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    @Override

    public void actionPerformed(ActionEvent e) {

        LoginDlg dlg=new LoginDlg(this);

        dlg.txtId.setText("admin");

    }

}

class LoginDlg extends JDialog implements ActionListener{

    MyFrame06 frm;

    JTextField txtId=new JTextField();

    JTextField txtPwd=new JTextField();

    JButton btnOk=new JButton("확인");

    JButton btnCancel=new JButton("취소");


    public LoginDlg(MyFrame06 frm){

        this.frm=frm;    

        setLayout(new GridLayout(3,2));

        add(new JLabel("아이디"));

        add(txtId);

        add(new JLabel("비밀번호"));

        add(txtPwd);

        add(btnOk);

        add(btnCancel);        

        btnOk.addActionListener(this);        

        setSize(200,120);

        setVisible(true);

    }

    @Override

    public void actionPerformed(ActionEvent e) {

        if(txtId.getText().equals("song") && txtPwd.getText().equals("1234")){

            frm.lbl.setText(txtId.getText()+"님 환영합니다.");


            //다이얼로그 닫기

            dispose();

        }else{

            JOptionPane.showMessageDialog(this,"아이디 또는 비밀번호가 틀려요!");

        }

    }

}

public class Test06_Dlg{

    public static void main(String[] args) {

        new MyFrame06();

    }

}

 

 


 


 


 

 

'JAVA' 카테고리의 다른 글

이클립스 UTF-8 설정  (0) 2014.09.13
Swing ( Ⅱ )  (0) 2014.09.13
Swing ( Ⅰ )  (0) 2014.09.13
내부클래스(inner class) / 로컬 내부 클래스 / static 내부 클래스 / 익명의 내부클래스 / url  (0) 2014.09.13
멀티 채팅 샘플  (0) 2014.09.13

 

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

    }

}

 

 

 

 

'JAVA' 카테고리의 다른 글

이클립스 UTF-8 설정  (0) 2014.09.13
Swing ( Ⅲ )  (0) 2014.09.13
Swing ( Ⅰ )  (0) 2014.09.13
내부클래스(inner class) / 로컬 내부 클래스 / static 내부 클래스 / 익명의 내부클래스 / url  (0) 2014.09.13
멀티 채팅 샘플  (0) 2014.09.13

 

1.  이벤트처리


-이벤트: 윈도우상에서 발생되는 여러사건--> 마우스클릭,키보드누름,마우스움직임,버튼클릭,윈도우가실행될때,윈도우가 닫힐때,..


-이벤트처리: 이벤트가 발생되었을때 적절한 처리를 하는것 예)버튼을 누르면 메시지출력,윈도우종료버튼을 누르면 프로그램종료,..



[ 자바에서의 이벤트 처리 ]


 1)이벤트가 발생되었을때 어떤 작업을 할건지에 대한 이벤트 리스너 만들기 --> 발생될 이벤트에 따라 해당 이벤트리스너가 정해져 있음


 예)키보드 누름 --> KeyListener

    마우스움직임 --> MouseMotionListener

    버튼클릭 --> ActionListener

        ..


 2) 이벤트 리스너 객체 생성하기


 3) 이벤트가 발생될 객체(이벤트소스)에 이벤트리스너 연결하기.




2

MyTest02.java

package test01;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;


class MyFrame02 extends JFrame {

    JLabel lbl1 = new JLabel("이름 입력");

    JTextField txt = new JTextField(10);

    JButton btn1 = new JButton("출력");

    JLabel lbl2 = new JLabel("입력 된 이름:");

    JPanel pan = new JPanel();

    public MyFrame02() {

        setLayout(new GridLayout(2, 1));

        pan.add(lbl1);

        pan.add(txt);

        pan.add(btn1);

        // pan.setBackground(Color.RED);

        add(pan);

        add(lbl2);

        setSize(400, 150);

        setVisible(true);


        // 1.이벤트리스너 만들기

         // 이벤트리스너 만들기

        class MyEvent implements ActionListener {

            // 버튼을 눌렀을 때 처리해야 할 일을 작성

            @Override

            public void actionPerformed(ActionEvent e) {

                // 입력 된 텍스트 얻어오기

                String str = txt.getText();


                // JLabel에 입력 된 텍스트 보이기

                lbl2.setText("당신의 이름은 " + str + "입니다.");

            }

        }


        // 2. 이벤트리스너객체 생성

        MyEvent me = new MyEvent();

        // 3. 버튼에 이벤트리스너 등록

        btn1.addActionListener(me);

    }

}

public class MyTest02 {

    public static void main(String[] args) {

        new MyFrame02();

    }

}



 

 





3. List


ex> MyTest03_List.java

package test01;

import java.awt.BorderLayout;

import java.awt.List;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

class MyFrame03 extends JFrame implements ActionListener {

    JTextField txt = new JTextField(10);

    JButton btn = new JButton("추가");

    JButton btnDel = new JButton("삭제");

    List list = new List();

    JPanel pan = new JPanel();

    public MyFrame03() {


        // JPanel에 컴포넌트 붙이기

        pan.add(new JLabel("회원이름"));

        pan.add(txt);

        pan.add(btn);

        pan.add(btnDel);

        // 프레임 레이아웃 설정하기

        setLayout(new BorderLayout());


        // pan을 North영역에 붙이기

        add(pan, BorderLayout.NORTH);


        // list를 Center영역에 붙이기

        add(list, BorderLayout.CENTER);

        // 버튼에 이벤트 등록하기

        btn.addActionListener(this);

        btnDel.addActionListener(this);

        setSize(400, 400);

        setVisible(true);

    }

    @Override

    public void actionPerformed(ActionEvent e) {

        // 입력된 이름을 List에 추가

        if (e.getSource() == btn) {


            // 입력된 텍스트 얻어오기

            String name = txt.getText();


            // List에 입력된 텍스트 추가하기

            list.add(name);


            // 텍스트필드내용지우기

            txt.setText("");


            // 텍스트필드에 포커스주기

            txt.requestFocus();


        } else if (e.getSource() == btnDel) {

        // 선택한 항목을 List에서 제거

            // List의 선택한 항목의 index값 얻어오기

            int pos = list.getSelectedIndex();

            

            // 선택한 항목이 없는 경우

            if (pos == -1) {

                JOptionPane.showMessageDialog(this, "삭제할항목을 선택하세요!");


                // 메소드끝내기

                return;

            }

            list.remove(pos);

        }

    }

}

public class MyTest03_List {

    public static void main(String[] args) {

        new MyFrame03();

    }

}



 

 





EX> 이벤트 리스트 등록하는 3가지 방법이 존재. 결과는 동일함.

package test01;


import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;


import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;


class QuizFram01 extends JFrame{


    JTextField txt1 = new JTextField(5);

    JTextField txt2 = new JTextField(5);

    JTextField txt3 = new JTextField(5);

    JLabel lbl1 = new JLabel("+");

    JLabel lbl2 = new JLabel("=");

    

    JButton btn1 = new JButton("덧셈");

    JPanel pan1 = new JPanel();

    JPanel pan2 = new JPanel();

    

    public QuizFram01(){

        pan1.add(txt1);

        pan1.add(lbl1);

        pan1.add(txt2);

        pan1.add(lbl2);

        pan1.add(txt3);

        

        setLayout(new GridLayout(2, 1));

        add(pan1);

        add(btn1);


//  방법1

//        class ButtonEvent implements ActionListener{

//            public void actionPerformed(ActionEvent e){

//                int c = Integer.parseInt(txt1.getText());

//                int d = Integer.parseInt(txt2.getText());

//                

//                txt3.setText( String.valueOf(c+d) );

//            }

//        }

//        ButtonEvent be = new ButtonEvent();

//        btn1.addActionListener(be);

        

// 방법2        

//        ActionListener act = new ActionListener() {

//            @Override

//            public void actionPerformed(ActionEvent e) {

//                int c = Integer.parseInt(txt1.getText());

//                int d = Integer.parseInt(txt2.getText());

//                

//                txt3.setText( String.valueOf(c+d) );

//            }

//        };

//        btn1.addActionListener(act);

        

        // 방법3

        btn1.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                int c = Integer.parseInt(txt1.getText());

                int d = Integer.parseInt(txt2.getText());

                

                txt3.setText( String.valueOf(c+d) );

            }

        });        

        

        setSize(400,100);

        setVisible(true);

        

    }

}

public class Quiz01 {

    public static void main(String[] args) {

        new QuizFram01();

    }

}



 

 






4. JRadioButton



ex> 라디오버튼 클릭하면 색깔이 변경된다.

package test01;

import java.awt.Color;

import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;

import javax.swing.JFrame;

import javax.swing.JRadioButton;

class MyFrame04 extends JFrame implements ActionListener {

    JRadioButton rb1 = new JRadioButton("빨강");

    JRadioButton rb2 = new JRadioButton("파랑");

    JRadioButton rb3 = new JRadioButton("노랑");


    // RadioButton을 그룹으로 묶는 객체

    ButtonGroup gb = new ButtonGroup();

    Container con;

    public MyFrame04() {


        // 버튼그룹에 라디오버튼 담기

        gb.add(rb1);

        gb.add(rb2);

        gb.add(rb3);


        // 콘텐츠영역 얻어오기

        con = getContentPane();

        con.setBackground(Color.ORANGE);

        setLayout(new FlowLayout());

        con.add(rb1);

        con.add(rb2);

        con.add(rb3);

        rb1.addActionListener(this);

        rb2.addActionListener(this);

        rb3.addActionListener(this);

        setSize(400, 300);

        setVisible(true);

    }

    @Override

    public void actionPerformed(ActionEvent e) {

        if (e.getSource() == rb1) {

            con.setBackground(Color.RED);

        } else if (e.getSource() == rb2) {

            con.setBackground(Color.BLUE);

        } else if (e.getSource() == rb3) {

            con.setBackground(Color.YELLOW);

        }

    }

}

public class MyTest04{

    public static void main(String[] args) {

        new MyFrame04();

    }

}


 

 





5. Adapter


[ 어댑터클래스 ]

- 이벤트를 처리할때 이벤트리스너를 상속받으면 리스너가 인터페이스이므로 모든 메소드를 오버라이딩해야 한다. 이는 매우 불편하므로 자바에서는 어댑터클래스를 제공한다. 어댑터클래스는 이벤트리스너를 상속받아 모든 메소드를 오버라이딩한 클래스이다. 사용자는 어댑터클래스를 상속받아 필요한 메소드만 오버라이딩하여 필요한 기능만 구현하면 된다.

 

예)

 WindowListener --> WindowAdapter

 KeyListener --> KeyAdapter

 ...




ex> MyTest05_Adapter.java

윈도우를 종료하면 종료로그를 화면에 찍는다.

package test01;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

import javax.swing.JFrame;

class MyFrame05 extends JFrame {

    public MyFrame05() {

        setSize(400, 400);

        setVisible(true);

        class MyWindow implements WindowListener {

            @Override

            public void windowOpened(WindowEvent e) {

            }

            @Override

            public void windowClosing(WindowEvent e) {

                System.out.println("윈도우를 종료해요!");

                System.exit(0);

            }

            @Override

            public void windowClosed(WindowEvent e) {

            }

            @Override

            public void windowIconified(WindowEvent e) {

            }

            @Override

            public void windowDeiconified(WindowEvent e) {

            }

            @Override

            public void windowActivated(WindowEvent e) {

            }

            @Override

            public void windowDeactivated(WindowEvent e) {

            }

        }

        // 프레임의 윈도우 리스너 등록하기

        addWindowListener(new MyWindow());

    }

}

public class MyTest05_Adapter{

    public static void main(String[] args) {

        new MyFrame05();

    }

}



 

  

 

     




ex> addWindowListener메소드를 바로 호출해서 사용하는 예(결과는 동일하다.)

package test01;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JFrame;


class MyFrame06 extends JFrame{

    public MyFrame06() {

        setSize(400,400);

        setVisible(true);


//        WindowAdapter wa=new WindowAdapter(){

//            @Override

//            public void windowClosing(WindowEvent e) {

//                System.out.println("윈도우를 종료해요.");

//                System.exit(0);

//            }

//        };

//        addWindowListener(wa);


        addWindowListener(new WindowAdapter(){

            @Override

            public void windowClosing(WindowEvent e) {

                System.out.println("윈도우를 종료해요.");

                System.exit(0);

            }

        });

    }

}

public class MyTest06_Adapter {

    public static void main(String[] args) {

        new MyFrame06();

    }

}

 






6. MouseMotionAdapter


ex> 마우스를 움직이면 마우스의 x,y좌표가 출력된다.

MyTest07_MouseMotionAdapter.java

package test01;

import java.awt.BorderLayout;

import java.awt.Canvas;

import java.awt.Color;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionAdapter;

import javax.swing.JFrame;

import javax.swing.JLabel;


class MyFrame07 extends JFrame {

    JLabel lbl = new JLabel("현재 마우스 좌표:");

    Canvas cvs = new Canvas();

    public MyFrame07() {

        setSize(500, 500);

        setVisible(true);

        setLayout(new BorderLayout());

        cvs.setBackground(Color.yellow);

        add(lbl, BorderLayout.NORTH);

        add(cvs, BorderLayout.CENTER);

        MouseMotionAdapter ma = new MouseMotionAdapter() {

            public void mouseMoved(MouseEvent e) {

                // 마우스 x 좌표 얻어오기

                int x = e.getX();

                int y = e.getY();

                String str = "x좌표:" + x + ",y좌표:" + y;


                // lbl에 문자열 넣기

                lbl.setText(str);

            }

        };


        // Canvas에 이벤트리스너 등록하기

        cvs.addMouseMotionListener(ma);

        // 종료버튼을 누르면 프로그램 종료하기

        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

}

public class MyTest07_MouseMotionAdapter{

    public static void main(String[] args) {

        new MyFrame07();

    }

}






7. TextArea


ex> MyTest08_TextArea.java 화면 내용을 파일로 저장

package test01;

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.FileNotFoundException;

import java.io.PrintWriter;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

class MyFrame08 extends JFrame {

    JButton btn = new JButton("파일로저장");

    JButton btnEnd = new JButton("종료");

    JTextArea ta = new JTextArea();

    public MyFrame08() {

        setLayout(new BorderLayout());

        add(btn, BorderLayout.NORTH);

        add(new JScrollPane(ta), BorderLayout.CENTER);

        add(btnEnd, BorderLayout.SOUTH);

        // 종료버튼 눌렀을때

        btnEnd.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {


                // 부모컴포넌트, 보여줄메시지,  타이틀, 버튼형태

                int ch = JOptionPane.showConfirmDialog(null,

                        "종료할까요?",

                        "종료",

                        JOptionPane.YES_NO_OPTION

                        );

                 // 사용자가 '예' 버튼을 선택한 경우

                if (ch == JOptionPane.YES_OPTION) {

                     // 프로그램 종료하기

                    System.exit(0);

                }

            }

        });

        // 버튼을 눌렀을때의 이벤트 처리

        btn.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                // 텍스트에리어에 입력된 문자열 얻어오기

                String str = ta.getText();

                try {

                    String fileName = JOptionPane.showInputDialog("저장할 파일명 입력");


                    // 파일에 출력하기위한 스트림객체 얻어오기

                    PrintWriter pw = new PrintWriter(fileName);


                    // 파일로 저장하기

                    pw.println(str);


                    // 스트림닫기

                    pw.close();

                    JOptionPane.showMessageDialog(null, "파일로저장성공!");

                } catch (FileNotFoundException fe) {

                    System.out.println(fe.getMessage());

                }

            }

        });

        setSize(500, 500);

        setVisible(true);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

}

public class MyTest08_TextArea{

    public static void main(String[] args) {

        new MyFrame08();

    }

}




 

 





8. Layout


ex> MyTest09_Layout.java

package test01;

import java.awt.BorderLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;


class MyFrame09 extends JFrame {

    JButton btn1 = new JButton("버튼1");

    JButton btn2 = new JButton("버튼2");

    JButton btn3 = new JButton("버튼3");

    JButton btn4 = new JButton("버튼4");

    JPanel pan = new JPanel();

    public MyFrame09() {

        // 레이아웃매니져 사용안하기

        setLayout(null);

        pan.setLayout(new BorderLayout());

        pan.add(btn4, BorderLayout.NORTH);

        // 컴포넌트의 사이즈가 위치를 일일이 지정해 줘야 한다.

        btn1.setSize(100, 50);

        btn2.setSize(100, 50);

        btn3.setSize(100, 100);

        // 버튼의 위치 설정하기

        btn1.setLocation(10, 10);

        btn2.setLocation(120, 10);

        btn3.setLocation(230, 10);

        add(btn1);

        add(btn2);

        add(btn3);

        setSize(400, 400);

        setVisible(true);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

}

public class MyTest09_Layout{

    public static void main(String[] args) {

        new MyFrame09();

    }

}



 




 

 

 

1.  내부클래스(inner class) 



- 클래스 또는 메소드 안에 또 다른 클래스를 만드는것(멤버로 클래스를 정의)


- 내부클래스는 외부클래스의 모든 멤버를 자신의 멤버처럼 사용가능 (private멤버접근 가능)


- static내부 클래스를 제외한 내부 클래스는 항상 외부 클래스 객체를 통해서 생성할 수 있다.

 


ex> Test01_inner.java

package test01;

import test01.OuterClass.InnerClass;

//외부클래스

class OuterClass{

    private int a=10;

    public void printa(){

        System.out.println("a:" +a);

    }

    public void printab(){

        InnerClass ic=new InnerClass();

        ic.print();

    }


    //내부클래스

    class InnerClass{

        private int b=20;

        public void print(){

            //내부클래스는 외부클래스의 private멤버까지도 맘대로 접근할 수 있다.

            System.out.println("a:" + a);

            System.out.println("b:"+b);

        }

    }

}

public class Test01_inner {

    public static void main(String[] args) {

        OuterClass oc=new OuterClass();

        oc.printab();


        //내부클래스 객체를 생성할때는 외부클래스 객체를 통해서 생성해야 한다.

        OuterClass.InnerClass aa=oc.new InnerClass();

        aa.print();

    }

}

 

 




2.  로컬내부 클래스 


- 메소드안에서 정의된 클래스(메소드안에서만 사용할 수 있다.)


- 외부클래스의 모든 멤버에 접근 가능(private멤버도 접근 가능)


- 지역변수는 접근 할 수 없지만 final로 선언된 상수는 접근 가능하다.


Ex> Test02_localInner.java

package test01;


class OuterClass1{


    private int a=10;


    public void test(){

        int b=20;

        final int d=40;


        class LocalInner{

            private int c=30;


            //내부클래스에서 static멤버는 선언할 수 없다.

            //private static int f=100;


            public void print(){

                System.out.println("a:" + a);


                //로컬내부클래스는 지역변수는 접근할 수 없다.

                //System.out.println("b:" + b);

                System.out.println("c:" + c);


                //final로 선언된 지역변수(상수)는 접근할 수 있다.

                System.out.println("d:" + d);

            }

        }

        LocalInner inner=new LocalInner();

        inner.print();

    }    

}

public class Test02_localInner {

    public static void main(String[] args) {

        

    }

}






3.  static 내부 클래스 


- 멤버변수에 static이 있으면 내부클래스로 static으로 만들어야 한다.


- static 내부클래스를 외부에서 생성하려면 Outer클래스객체의 생성없이 바로 생성할 수 있다.



ex> Test03_staticInner.java

package test01;


class OuterClass02{

    private int a=10;

    private static int b=20;


    static class InnerClass{

        private static int c=30;


        public void print(){

            //일반멤버변수(인스턴스변수)는 접근할 수 없음!

            //System.out.println("a:" + a);

            System.out.println("b:" + b);

            System.out.println("c:"+c);

        }

    }

    public void printAll(){

        //내부클래스 객체 생성

        InnerClass ic=new InnerClass();

        ic.print();

    }

}

public class Test03_staticInner {

    public static void main(String[] args) {

        //OuterClass02 oc=new OuterClass02();

        //oc.printAll();

        //static내부클래스 생성하기

        OuterClass02.InnerClass oi=new OuterClass02.InnerClass();

        oi.print();

    }

}

 


 


4. 익명의 내부 클래스(**) 


- 추상클래스나 인터페이스를 상속받아 딱 한번만 사용하고 버려질 클래스인경우 익명의 내부 클래스를 만들어 사용한다.


- 만드는 방법

   인터페이스(추상클래스) 객체명=new 인터페이스(){

       추상메소드오버라이딩(){..}

      ...

   };

 


ex> Test04_Anonymous.java

package test01;


interface Shape{

    void draw();

    void paint();

}

interface Message{

    void send(String msg);

}

public class Test04_Anonymous {

    public static void main(String[] args) {

        //Message를 익명의 내부클래스를 만들어 사용해 보세요.

        Message mm=new Message(){

            public void send(String msg){

                System.out.println(msg +" 를 이멜로 전송했습니다.");

            }

        };

        mm.send("test...");

        

        new Message(){

            public void send(String msg){

                System.out.println(msg+" 를 문자메시지로 보냈어요!");

            }

        }.send("ddd");

        

        //익명의 내부 클래스 만들기

        Shape sh=new Shape(){

            //추상메소드 오버라이딩

            public void draw(){

                System.out.println("사각형그리기");

            }

            public void paint(){

                System.out.println("사각형칠하기");

            }

        };

        sh.draw();

        sh.paint();

        

//        class Box implements Shape{

//            public void draw(){System.out.println("사각형그리기");}

//            public void paint(){System.out.println("사각형칠하기");}

//        }

//        Box bo=new Box();

//        bo.draw();

//        bo.paint();

//        

//        Box bo1=new Box();

    }

}




5.     

www.naver.com  url을 갖는 객체 생성 후 접속정보를 가져와 출력한다.


package test01.net;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;


public class Test01_Url {

    public static void main(String[] args) {

        try{

            //URL에 대한 정보를 갖는 클래스

            URL url=new URL("http://www.naver.com");

            System.out.println("호스트명:" + url.getHost());

            System.out.println("포트:" + url.getPort());


            //URL에 접속한 정보를 갖는 클래스

            URLConnection uc=url.openConnection();

            System.out.println("mime타입:" + uc.getContentType());

            System.out.println("인코딩:" + uc.getContentEncoding());

            System.out.println("헤더정보:" + uc.getHeaderFields());


            //url접속을 통해 데이터를 읽어오기 위한 스트림 얻어오기

            InputStream is=uc.getInputStream();

            BufferedReader br=

                new BufferedReader(new InputStreamReader(is,"utf-8"));


            String str="";


            while((str=br.readLine())!=null){

                str=br.readLine();

                System.out.println(str);

            }

            br.close();

            

        }catch(MalformedURLException me){

            System.out.println(me.getMessage());

        }catch(IOException ie){

            System.out.println(ie.getMessage());

        }

    }

}



 

 

'JAVA' 카테고리의 다른 글

Swing ( Ⅱ )  (0) 2014.09.13
Swing ( Ⅰ )  (0) 2014.09.13
멀티 채팅 샘플  (0) 2014.09.13
AWT ( Frame / Button / Layout / JPanel ) - 간단한 예제  (0) 2014.09.13
Network - 파일전송 ( Ⅳ )  (0) 2014.09.12

+ Recent posts