• 티스토리 홈
  • 프로필사진
    Song hyun
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Song hyun
  • 프로필사진
    Song hyun
    • 분류 전체보기 (780)
      • 백준 (0)
      • 영어 (2)
        • Diary (0)
        • Toast Masters (2)
      • 메모 (13)
      • 설치 메뉴얼 (30)
      • Java (178)
      • MySQL (60)
      • JSP (67)
      • Springboot (46)
      • HTML,CSS, JS (71)
        • HTML (8)
        • CSS (12)
        • JavaScript (37)
        • HTML&CSS 스터디 (13)
      • C++ (7)
      • Linux (7)
      • JPA (34)
      • Kotlin (2)
      • Flutter (42)
      • Error Note (39)
      • 디자인 패턴 (12)
      • 디지털논리회로 (4)
      • 데이터베이스 시스템 (8)
      • 알고리즘 (7)
      • 운영체제 (3)
      • 이산수학 (3)
      • 인공지능 (1)
      • 자료 구조 (14)
        • 기본 개념 (14)
        • 자료구조 스터디 (0)
      • 💡My project (76)
        • 팩맨 : Java Swing 게임 제작 프로젝트 (6)
        • 네이트톡 : Java 소켓 통신 프로젝트 (4)
        • 포켓옥션 : HikariCP&JDBC CRUD 프.. (3)
        • 이지 부산 : BDIA-Devton 2024 프로.. (20)
        • 그린 유니버시티 : JSP를 사용한 학사관리 프로.. (1)
        • 애드 포커 : 웹 소켓과 Spring을 사용한 카.. (1)
        • 셸위 : 게임 친구 매칭 사이트 (21)
        • 다모아 : 개발자 중개 플랫폼 (20)
      • 📗스터디 (13)
        • CNN : 웹개발 스터디 (10)
        • Node&React로 유튜브 사이트 만들기 (3)
      • 📙독서 및 강연 기록 (36)
        • 강연 (14)
        • 독서 (22)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [Java] 63. Swing: 리스너 응용-리스너를 구현하는 두 가지 방법
        2024년 04월 29일
        • Song hyun
        • 작성자
        • 2024.04.29.:43
        728x90
        반응형

        [Java] 63. Swing: 리스너를 구현하는 두 가지 방법

        1. 버튼을 클릭하면 backgroundColor의 색이 노란색으로 변하게 해라.


        (1) 상속 - JFrame
        JFrame은 윈도우 창을 제공하는 최상위 컨테이너이다. 

        (2) 멤버변수
        JPanel, JButton형 변수를 각각 1, 2개씩 사진다.

        (3) 사용자 정의 생성자
        객체를 생성하는 동시에, initData(), setInitLayout(), addEventListener() 메서드를 실행한다.

        (4) initData() 메서드
        setSize(500,500): 창의 사이즈 설정
        setDefaultCloseOperation: x 버튼을 눌렀을 때의 프로그램 처리 방식 결정
        setLayout: 배치 관리자 설정(BorderLayout)
        panel=new JPanel(); | button1=new JButton();: 새로운 변수 선언
        panel.setBackground(Color.YELLOW): panel의 배경 색을 노란 색으로 변경한다.

        (5) setInitLayout() 메서드
        add(button1,BorderLayout.NORTH): 북쪽에 button1 배치
        add(panel, BorderLayout.CENTER): 중앙에 panel 배치
        setVisible(true): 창이 보이게끔 설정.

        (6) addEventListener() 메서드: 이벤트 리스너를 구현하는 메서드
        button1.addActionListener(new ActionListener()): button1의 동작을 감지하는 이벤트 리스너를 만든다.
        *actionPerformed() 메서드: 오버라이드 처리.

        package ch05;
        
        import java.awt.BorderLayout;
        import java.awt.Color;
        import java.awt.FlowLayout;
        import java.awt.event.ActionEvent;
        import java.awt.event.ActionListener;
        import javax.swing.JButton;
        import javax.swing.JFrame;
        import javax.swing.JPanel;
        
        public class ColorChangeFrame2 extends JFrame {
        	private JPanel panel;
        	private JButton button1;
        	private JButton button2; 
        	
        	public ColorChangeFrame2() {
        		initData();
        		setInitLayout();
        		addEventListener();
        	}
        	
        	private void initData() {
        		setSize(500,500);
        		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        		setLayout(new BorderLayout());
        		panel=new JPanel();
        		panel.setBackground(Color.YELLOW);
        		button1=new JButton("click1");
        	}
        	private void setInitLayout() {
        		add(button1,BorderLayout.NORTH);
        		add(panel,BorderLayout.CENTER);
        		setVisible(true);
        	}
        	private void addEventListener() {
        		// 이벤트 리스너를 구현하는 두번째 방법
        		button1.addActionListener(new ActionListener() {
        			
        			@Override
        			public void actionPerformed(ActionEvent e) {
        				// TODO Auto-generated method stub
        				
        			}
        		});
        	}
        	
        	public static void main(String[] args) {
        		new ColorChangeFrame2();
        	} // end of main
        
        }

         

         

        2. 누른 버튼에 따라 다른 색 출력하기

        : 상하에 각가 button1, button2가 있다.

        누른 버튼에 따라 backgroundColor의 색을 변경시키는 메서드를 만들어라.

         


        *JButton 객체를 2개 생성한다. 

        ->그리고 각각의 객체에 반응하는 actionListener를 만들고,

        -->actionListener에게서 신호를 받으면 색이 변하도록 if문을 활용해 작성한다.

         

        ** If문: e.getSource의 값이 버튼1의 주소값과 같은가, 버튼2의 주소값과 같은가?

        package ch05;
        
        import java.awt.BorderLayout;
        import java.awt.Color;
        import java.awt.FlowLayout;
        import java.awt.event.ActionEvent;
        import java.awt.event.ActionListener;
        import javax.swing.JButton;
        import javax.swing.JFrame;
        import javax.swing.JPanel;
        
        public class ColorChangeFrame2 extends JFrame implements ActionListener {
        	private JPanel panel;
        	private JButton button1;
        	private JButton button2;
        
        	public ColorChangeFrame2() {
        		initData();
        		setInitLayout();
        		addEventListener();
        	}
        
        	private void initData() {
        		setSize(500, 500);
        		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        		setLayout(new BorderLayout());
        		panel = new JPanel();
        		panel.setBackground(Color.YELLOW);
        
        		button1 = new JButton("click1");
        		button2 = new JButton("click2");
        	}
        
        	private void setInitLayout() {
        		add(button1, BorderLayout.NORTH);
        		add(button2, BorderLayout.SOUTH);
        		add(panel, BorderLayout.CENTER);
        		setVisible(true);
        	}
        
        	// 이 메서드의 책임은 이벤트 리스너만 등록
        	private void addEventListener() {
        		button1.addActionListener(this);
        		button2.addActionListener(this);
        	}
        
        	// 오버라이드: 이벤트가 일어나면 호출되어지는 메서드.
        	public void actionPerformed(ActionEvent e) {
        		System.out.println(e.getSource().toString());
        		if (e.getSource().equals(button1)) {
        			panel.setBackground(Color.RED);
        		} else if (e.getSource().equals(button2)) {
        			panel.setBackground(Color.GREEN);
        		}
        
        		// Object object = e.getSource();
        		// JButton selectedButton=(JButton)e.getSource();
        		// 이하 주소값을 비교한 if문으로 각기 다른 컬러 출력.
        	}
        
        	public static void main(String[] args) {
        		new ColorChangeFrame2();
        	} // end of main
        
        }

         

         

        3. 버튼을 여러개 만들고, 누른 버튼에 따라 색 변경하도록 만들기

        -순서대로 흰색(누르기 전), 빨간색(버튼1), 분홍색(버튼2), 노란색(버튼3)이다. 

         

        *2번 예제와 동일한 매커니즘이다. 갯수가 다를 뿐이다.

        package ch05;
        
        import java.awt.BorderLayout;
        import java.awt.Color;
        import java.awt.FlowLayout;
        import java.awt.event.ActionEvent;
        import java.awt.event.ActionListener;
        
        import javax.swing.JButton;
        import javax.swing.JFrame;
        import javax.swing.JPanel;
        
        public class VarietyButtons extends JFrame implements ActionListener {
        	private JPanel panel1;
        	private JPanel panel2;
        	private JButton button1;
        	private JButton button2;
        	private JButton button3;
        	private JButton button4;
        	private JButton button5;
        
        	public VarietyButtons() {
        		initData();
        		setInitLayout();
        		addEventListener();
        		setVisible(true);
        	}
        
        	private void initData() {
        		setSize(500, 500);
        		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        		//setLayout(new FlowLayout(FlowLayout.LEFT, 30, 40));
        		panel1 = new JPanel();
        		//panel1.setBackground(Color.white);
        		panel1.setSize(500, 500);
        		panel2 = new JPanel();
        		//panel2.setBackground(Color.white);
        		panel2.setSize(500, 500);
        		
        		button1 = new JButton("click1");
        		button2 = new JButton("click2");
        		button3 = new JButton("click3");
        	}
        
        	private void setInitLayout() {
        		add(panel1, BorderLayout.CENTER);
        		add(panel2, BorderLayout.SOUTH);
        		panel2.setLayout(new FlowLayout(FlowLayout.CENTER));
        		panel2.add(button1);
        		panel2.add(button2);
        		panel2.add(button3);
        	}
        
        	private void addEventListener() {
        		button1.addActionListener(this);
        		button2.addActionListener(this);
        		button3.addActionListener(this);
        
        		panel2.setBackground(Color.WHITE);
        	}
        
        	@Override
        	public void actionPerformed(ActionEvent e) {
        		System.out.println(e.getSource().toString());
        		Object object = e.getSource();
        		if (object == button1) {
        			panel1.setBackground(Color.RED);
        		} else if (object == button2) {
        			panel1.setBackground(Color.PINK);
        		} else if (object == button3) {
        			panel1.setBackground(Color.yellow);
        		}
        		// TODO Auto-generated method stub
        
        	}
        
        	public static void main(String[] args) {
        		new VarietyButtons();
        	} // end of main
        
        }
        728x90
        반응형

        'Java' 카테고리의 다른 글

        [Java] 65. Swing: 키보드 리스너 응용하기  (0) 2024.04.30
        [Java] 64. Swing: 키보드 리스너  (0) 2024.04.30
        [Java] 62. Swing: 이벤트 리스너  (0) 2024.04.29
        [Java] 61. Swing: 이미지 겹치기  (0) 2024.04.29
        [Java] 60. Swing: 이미지 출력하기  (0) 2024.04.29
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바