Java-GUI(frame, component, event)
GUI (graphical user interface)
- 사용자가 편리하게 입출력을 할 수 있도록 그래픽으로 화면을 구성하고 마우스나 키보드로 입력받을 수 있또록 지원하는 사용자 인터페이스
- 종류는 2가지 - AWT, SWING
AWT
- 운영체제가 제공하는 자원을 이용해서 컴포넌트를 생성 중량 컴포넌트
- AWT 컴포넌트의 그리기는 운영체제에 의해 이루어지며, 운영체제의 자원을 많이 소모하고 부담을 줌.
import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
SWING
- AWT기술을 기반으로 작성된 라이브러리
-
자바로 작성되어 있기 때문에 어떤 플랫폼에서도 일관된 화면을 보여줄 수 있음. 이거를 경량 컴포넌트라고 부름.
-
스윙컴포넌트는 운영체제의 도움을 받지않고 직접 그리기 때문에 운영체제에 부담을 주지않음.
- 스윙 프로그램은 컴포넌트를 이용해서 조립하듯이 작성
import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JTextField;
컨테이너
- 다른 컴포넌트를 포함할 수 있는 GUI컴포넌트
- 다른 컨테이너에 포함될 수 있음.
- SWING 대표 컨테이너 : JFrame, JPanel, JDialog
컴포넌트
- 컨테이너에 포함되어야만 화면에 출력할 수 있는 GUI객체
- 다른 컴포넌트를 포함할 수 없는 순수 컴포넌트
import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; class MyFrame2 extends JFrame { public MyFrame2() { //패널생성 : 컴포넌트를 담을 수 있는 컨테이너 JPanel jp = new JPanel(); //레이블 : 편집이 불가능한 텍스트 JLabel label = new JLabel("안뇽"); //버튼 : 사용자가 클릭했을 경우, 이벤트를 발생하여 원하는 동작을 하게하는데 이용 JButton btn = new JButton("첫버튼임"); JButton btn1 = new JButton("두번째 버튼임"); JButton btn2 = new JButton("세번째 버튼임"); //텍스트 필드 : 입력이 가능한 한 줄의 텍스트 창 JTextField jf1 =new JTextField(10); // 10개 문자열 가능 JTextField jf2 =new JTextField(20); // 20개 문자열 가능 // 프레임에 패널 추가 add(jp); //패널에 컴포넌트 추가 jp.add(label); jp.add(btn); jp.add(btn1); jp.add(btn2); jp.add(jf1); jp.add(jf2); //입력가능 여부 jf2.setEditable(false); //Frame 셋팅 메소드 호출 setTitle("MyFrameTest"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//끌때옵션 setResizable(true);//리사이즈 setSize(500,400);//사이즈 setVisible(true); } } public class ComponentTest2 { public static void main(String[] args) { new MyFrame2(); } }
최상위 컨테이너
- 다른 컨테이너에 포함되지 않고도 화면에 출력되며, 독립적으로 존재 가능한 컨테이너
- 스스로 화면에 자신을 출력하는 컨테이너 : JFrame, JDialog
JFrame
- 모든 스윙컴포넌트를 담는 최상위 컨테이너
- 컴포넌트를 화면에 보이려면 스윙 프레임에 부착되어야함.
이벤트 - 구동프로그래밍
-
마우스 버튼 클릭, 더블클릭, 마우스 이동 등과 같은 “이벤트”에 응답하는 형태로 작성하는 프로그래밍
- 이벤트 처리과정
- 이벤트를 발생하는 컴포넌트 작성
- 이벤트 리스너 를 작성
- 이벤트 리스너를 컴포넌트에 등록
- 컴포넌트의 동작으로 이벤트발생!
- 이벤트리스너의 위치
- 별도의 클래스를 이벤트 리스너로 작성하는 경우
class MyFrame1 extends JFrame{ } class MyListener1 implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub System.out.println("이벤트 발생!"); } } public class MyFrameTest { public static void main(String[] args) { new MyFrame1(); } }
- 프레임클래스가 ActionListener인터페이스를 상속받아 구현하게 하는 경우
- 이러면 강제적으로 프레임 클래스안에 구현메소드를 꼭 만들어야함.
class MyFrame2 extends JFrame implements ActionListener{ public MyFrame2() { } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub } }
- 이러면 강제적으로 프레임 클래스안에 구현메소드를 꼭 만들어야함.
- 익명클래스로 선언 후 생성을 해버리기
- 프레임 클래스는 JFrame만 상속받고 (인터페이스는 상속 x)
class MyFrame7 extends JFrame { public MyFrame2() { } btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { } }); }
- 프레임 클래스는 JFrame만 상속받고 (인터페이스는 상속 x)
- 별도의 클래스를 이벤트 리스너로 작성하는 경우
- 이벤트객체 사용하기
- 해당 이벤트가 발생하면 그 이벤트에 대한 정보를 이벤트 객체로 넘겨받음.
public void actionPerformed(ActionEvent e) { //System.out.println(e.getActionCommand()); //System.out.println(e.getSource()); //System.out.println(e.getID()); if(e.getSource()==btnYellow) { panel.setBackground(Color.yellow); } else if(e.getSource()==btnRed){ panel.setBackground(Color.red); } } // 구현해야만하는 추상메소드만 써놓은거
- 해당 이벤트가 발생하면 그 이벤트에 대한 정보를 이벤트 객체로 넘겨받음.
댓글남기기