Vue.js
1.0.0
1.0.0
  • README
  • Git
    • Basic
    • Remote Repository
    • Log & Diff
    • Rebase&Cherri-Pick
    • git-flow
  • DevOps
    • Monolithic vs MSA
    • Jenkins 시작하기
    • Airflow 시작하기
    • Airflow 시작하기
    • Build Tools
      • maven
  • 개발 방법론
    • TDD
  • Spring
    • IoC
    • Is Spring Bean Thread-Safe?
    • Spring Singleton
    • Component Scan
    • Spring Annotation
    • 의존 관계 주입(DI)
    • Lombok 활용하기
    • Bean 생명주기와 콜백
    • Bean Scope
    • AOP(1) - AOP란
    • AOP(2) - Aop Proxy
    • AOP(3) - Dynamic Proxy
    • AOP(4) - AspectJ
    • POJO
    • Spring 서비스 구조
    • Transaction
    • JPA란?
    • JPA Entity
    • Spring Data JPA
    • Spring Data Specification
    • Model Mapping
    • Cache
    • restTemplate
    • YAML 파일 설정
    • Spring Boot
      • H2 DB 설정
      • 다중 데이터베이스 설정
      • Mybatis 연동하기
    • Spring Batch
      • Batch 시작해보기
      • Batch Job Flow
      • Job
      • Step
      • Batch Scope & Job Parameter
      • JobRepository와 메타테이블
      • Chunk 지향 프로그래밍
      • ItemReader
      • ItemProcessor
      • ItemWriter
      • Batch Schedular
      • Job별 Bean등록하기
      • Batch 구현시 발생한 오류 정리
      • Spring Batch Scaling
        • Multithread Job구현시 이슈사항
    • Spring test
      • Junit5
        • 테스트 이름 표기
        • 테스트 그룹 사이의 관계
        • 태그와 필터링
        • 동적 테스트
        • 테스트 LifeCycle
        • 테스트 메서드
        • 테스트 순서
        • AssertJ
        • 테스트 병렬 실행
        • AssertJ
        • Mock
      • Spring Boot Test DB 분리
      • Spring Batch Test
  • Web Application
    • Web Server & WAS
    • 관련 개념 - HTTP API, HTML, CSR, SSR
    • Servlet
    • JSP
    • Cookie And Session
    • 예외페이지
    • Java Bean
    • JDBC
    • Connection Pool
    • 파일 업로드
    • Expression Language
    • JSTL
    • FrontController패턴 Command 패턴
    • Forwarding
    • MVC
    • 회원가입예제
    • 참고
      • 개발환경설정
  • Java+
    • SOAP/WSDL vs REST
    • WSDL을 JAVA로 변환하기
    • SOAP 통신 OPEN API로 개발해보기
  • Java
    • Basic
      • 변수와 타입
      • 연산자
      • 조건문과 반복문
      • 참조 타입
      • 클래스
      • 상속(Inheritance)
      • 인터페이스(Interface)
      • 중첩 클래스와 중첩 인터페이스
      • 예외 처리
      • API - Object, System, Class, Math, Wrapper
      • API - String, StringBuffer, StringBuilder
      • Thread
      • Generic
      • Lambda
      • Collection - List, Set
      • Collection - Map
      • Collection - Tree
      • Collection - Stack, Queue
      • Stream
      • Reflection
      • 정규표현식
      • GUI
      • UML
      • Serializable
    • Advanced
      • OutOfMemoryError
      • AutoValue
      • meta-annotation
        • @Retention
        • @Target
        • @Repeatable
    • Effective Java 3/E
      • ITEM 1: Static Factory Method(정적 메소드)
      • ITEM 2: Builder Pattern
      • ITEM 3: Singleton
      • ITEM 4: Private Constructor
      • ITEM 5: Dependency Injection
      • ITEM 6: Avoid Unnecessary Object
      • ITEM 7: Eliminate Object Reference
      • ITEM 8: Avoid finalizer and cleaner
      • ITEM 9: try-with-resources
      • ITEM 10: The gerneral contract when overriding equlas
      • ITEM 11: Overriding hashCode
      • ITEM 12: overriding toString
      • ITEM 13: overriding clone judiciously
      • ITEM 14: Consider implementing comparable
      • ITEM 15: 클래스와 멤버의 접근을 최소화해라
      • ITEM 16: Use Accessor methods
      • ITEM 17: 변경 가능성을 최소화해라(불변 클래스)
      • ITEM 18: 상속보단 컴포지션을 사용해라
      • ITEM 19: 상속을 고려해 설계하고 문서화해라
      • ITEM 20: 추상 클래스보다 인터페이스를 우선하라
      • ITEM 21: 인터페이스는 구현하는 쪽을 생각해 설계해라.
      • ITEM 22: 인터페이스는 타입을 정의하는 용도로만 사용해라
      • ITEM 23: 태그 달린 클래스보다 클래스 계층구조를 활용해라
      • ITEM 24: 멤버 클래스는 되도록 static으로 구현해라
      • ITEM 25: 톱레벨 클래스는 한 파일에 하나만 생성해라.
      • ITEM 26: Raw type은 사용하지 마라
      • ITEM 27: 비검사 경고를 제거해라
      • ITEM 28: 배열보다는 리스트를 사용해라
      • ITEM 29: 이왕이면 제네릭 타입으로 만들어라
      • ITEM 30: 이왕이면 제네릭 메서드로 만들어라
      • ITEM 31 : 한정적 와일드카드를 사용해 API 유연성을 높여라
      • ITEM 32: 제네릭과 가변인수를 함께 쓸 때는 신중해라
      • ITEM 33: 타입 안전 이종 컨테이너를 고려해라
      • ITEM 34: int 상수 대신 열거 타입을 사용해라
      • ITEM 35: ordinal 메서드 대신 인스턴스 필드를 사용해라
      • ITEM 36: 비트 필드 대신 EnumSet을 사용해라
      • ITEM 37: ordinal 인덱싱 대신 EnumMap을 사용해라
      • TEM 38 : 확장할 수 있는 열거타입이 필요하면 인터페이스를 사용해라
      • ITEM 39: 명명 패턴보다 애너테이션을 사용해라
      • ITEM 40: @Override 어노테이션을 일관되게 사용해라
      • ITEM 41: 정의하려는 것이 타입이라면 마커 인터페이스를 사용해라
      • ITEM 42: 익명 클래스보다는 람다를 사용해라
      • ITEM 43: 람다보다는 메서드 참조를 사용해라
      • ITEM 44: 표준 함수형 인터페이스를 사용해라
      • ITEM 45: 스트림은 주의해서 사용해라
      • ITEM 46: 스트림에서 부작용 없는 함수를 사용해라
      • ITEM 47: 반환 타입으로는 스트림보다 컬렉션이 낫다.
      • ITEM 48: 스트림 병렬화는 주의해서 사용해라
      • ITEM 49: 매개변수가 유효한지 검사해라
      • ITEM 50: 적시에 방어적 복사본을 만들어라
      • ITEM 51: 메서드 시그니처를 신중히 설계해라
      • ITEM 52: 다중정의는 신중히 사용해라
      • ITEM 53: 가변인수는 신중히 사용해라
      • ITEM 54: null이 아닌, 빈 컬렉션이나 배열을 반환해라
      • ITEM 55: Optional 반환은 신중하게 해라
      • ITEM 56: 공개된 API 요소에는 항상 주석을 작성해라
      • ITEM 57: 지역변수의 범위를 최소화해라
      • ITEM 58: 전통적인 for 문보다는 for-each문을 사용해라
      • ITEM 59: 라이브러리를 익히고 사용해라
      • ITEM 60: 정확한 답이 필요하다면 float와 double은 피해라
      • ITEM 61: 박싱된 기본 타입보다는 기본 타입을 사용해라
      • ITEM 62: 다른 타입이 적절하다면 문자열 사용을 피해라
      • ITEM 63: 문자열 연결은 느리니 주의해라
      • ITEM 64: 객체는 인터페이스를 사용해 참조해라
      • ITEM 65: 리플렉션보다는 인터페이스를 사용해라
      • ITEM 66: 네이티브 메서드는 신중히 사용해라
      • ITEM 67: 최적화는 신중히 해라
      • ITEM 68: 일반적으로 통용되는 명명 규칙을 따라라
    • 객체지향 설계 원칙(SOLID)
    • 디자인패턴
      • Strategy Pattern
      • Template Method Pattern
      • Factory Method Pattern
      • Singleton
      • Delegation
      • Proxy
      • Adapter Pattern
    • 실습
      • 인터페이스 실습 - Vehicle
      • 인터페이스 실습 - Remote
      • GUI 실습 - Calculator
      • GUI 실습 - button
      • GUI 실습 - lotto
      • Thread 실습 - 좌석예약, 메세지보내기
    • Jar vs War
  • 데이터베이스
    • KEY
    • Index
    • Transaction
    • Trigger
    • Procedure / Function
    • Package
    • 데이터베이스 배움터
      • 데이터베이스 시스템
      • 관계데이터 모델
      • 관계대수와 SQL
    • MySQL
      • Database란
      • MySQL 시작하기
      • MySQL Database
      • MySQL Table
      • CRUD
      • 관계형 데이터베이스
      • Server와 Client
    • PostgreSQL
    • NoSQL
      • Install Cassandra on mac
      • Cassandra란?
      • NiFi란
  • Algorithm
    • String
    • Recursion
    • Dynamic Programming
    • Array, Struct, Pointer
    • Math
    • Sort
    • List
    • Stack
    • Queue
    • Graph
    • Tree
    • Maze
    • AVL
    • 이진탐색트리(Binary Search Tree)
    • DFS와 BFS
    • 다익스트라 알고리즘(Dijkstra's Algorithm)
    • Red-Black 트리
    • A* 알고리즘
    • Heap
    • Huffman Coding
    • Priority Queue
    • Bellman-Ford 알고리즘
    • C++
      • Class
      • STL
        • STL pair
        • STL Container - Associate Container
        • STL Container - Sequence Container
        • STL Container - Container Adapter
  • JavaScript
    • JABASCRIPT BASIC
    • Shallow Copy vs Deep Copy
    • OBJECT MODEL
    • NODE
    • 동기 처리 vs 비동기 처리
    • AJAX
    • CALLBACK
    • PROMISE
    • DEFERRER
    • UNDERSCORE
    • WEBPACK
    • SCOPE
    • EXECUTION CONTEXT
    • Image Object
    • BFCache란?
    • history.scrollRestoration
    • Intersection Observer
    • JWT - JSON Web Token
    • HTML vs JSON
  • Vue.js
    • 환경설정
    • Vue.js란?
    • Vue Instance
    • Vue Component
    • Vue Router
    • HTTP 통신
    • Template
    • Single File Component
    • Vue Animation
    • Vuex
    • Djnago와 연동하기
  • Backbone.js
    • Model
    • Collection
    • Sync
    • view
  • Node.js
    • Doit! - 노드로 만들 수 있는 대표적인 서버와 용도
    • Doit! - 노드에 대해 알아보고 개발 도구 설치하기
    • Doit! - 노드 간단하게 살펴보기
    • Doit! - 노드의 자바스크립트와 친해지기
    • Doit! - 노드의 기본 기능 알아보기
    • Doit! - 웹 서버 만들기
    • Doit! - 데이터베이스 사용하기
    • Doit! - 익스프레스 프로젝트를 모듈화하기
    • Doit! - 뷰 템플릿 적용하기
    • Doit! - 패스포트로 사용자 인증하기
    • Doit! - 채팅서버 만들기
    • Doit! - JSON-RPC 서버 만들기
  • Python
    • Warning-Could not import the lzma module
    • Pandas
      • Pandas 자료구조
      • Pandas 데이터 입출력
      • DataFrame Data 살펴보기
      • 시각화 도구 - Matplotlib
  • ML
    • 추천 시스템
      • Collaborative Filtering
      • Matrix Factorization
  • Django
    • Basic
      • 환경설정
      • About Django
      • Start Django Project
      • Secret Key 관리하기
      • Settings 분리하기
      • Django App
      • Django View & URL (1)
      • Django Model
        • MySQL 연동
      • Django Admin
      • Django View & URL (2)
      • Django Template
      • Django Template & View & URL
      • Django Static
      • Django form
    • Advanced
      • Django Generic View
      • Django Automated Testing
      • Django Extenstion Template
      • Django Model Package
      • Django OpenSSL setting
    • REST framework
      • Rest API
      • Serializers
      • ViewSet
    • Error
      • 환경설정 zlib 오류발생
      • ModuleNotFoundError
    • 패키지
      • django-debug-toolbar
    • Vue.js 연동하기
  • Ruby
    • variable & input/output
    • 조건문
    • 반복문
    • Array & Hash
    • Method
    • Proc&Lamda
    • Class
  • Ruby on Rails
    • Scaffolding
    • Controller
    • Model
    • Model-M:N relation
    • Model Validation
    • 멋사 10주차 수업(Tip)
  • HTML/CSS
    • Udacity - Intro to HTML/CSS
    • Udacity - Responsive Web Design
    • Udacity - Responsive Images
    • HTML Basic
    • CSS Basic
    • HTML5 Sementic Tag
    • HTML 텍스트 관련 태그들
    • HTML5 멀티미디어
    • HTML 폼 관련 태그들
    • 텍스트 관련 스타일
    • 색상과 배경을 위한 스타일
    • 레이아웃을 위한 스타일
    • CSS 포지셔닝
    • 다재다능한 CSS3 선택자
    • CSS와 애니메이션
    • 반응형 웹이란?
  • OS(운영체제)
    • Linux
      • Daemon
      • Cron
      • 프로세스 관련 명령어
      • 텍스트 파일 명령어
  • Network
    • 네트워크 기본 개념
    • 네트워크 기본 규칙
    • 물리 계층
    • 데이터 링크 계층
    • 네트워크 계층
    • 전송 계층
    • 응용 계층
    • 네트워크 전체 흐름
    • 무선 랜
  • IT 기타지식
    • NAS란
Powered by GitBook
On this page
  • Java GUI 종류
  • Container
  • Frame 생성 하기
  • 메소드 or 생성자
  • Panel
  • Component
  • Component 생성하기
  • 모양을 설정하는 메소드
  • Label
  • Button
  • Text Field
  • 여러가지 Component 생성하기
  • LayoutManager
  • Layout 설정 형식
  • Flow Laytout
  • Border Laytout
  • Grid Layout
  • Card Layout
  • 구체적인 위치 정하기
  • 복합적인 레이아웃 설정하기
  • 이벤트 처리
  • 액션 이벤트 actionPerformed()
  • 이벤트의 분류
  • Key Event
  • Mouse 이벤트
  • 참조 페이지

Was this helpful?

  1. Java
  2. Basic

GUI

Previous정규표현식NextUML

Last updated 3 years ago

Was this helpful?

GUI 응용 프로그램은 키보드뿐 아니라 마우스 사용 지원, 화려하고 다양한 화면과 더불어 사용자가 자유롭게 화면 작동 가능하다.

Java GUI 종류

  • AWT(Abstract Windows Toolkit) : 운영체제가 제공하는 자원을 이용하여 컴포넌트 생성한다. 따라서 운영체제 별로 느낌이 다르다.

    • java.awt.*

    • Button, Frame, TextField

  • Swing : 컴포넌트가 자바로 작성되어 있기 때문에 어떤 플랫폼에서도 일관된 화면을 보여줄 수 있다.

    • javax.swing.*

    • 형식화된 텍스트 입력이나 패스워드 필드 동작과 같은 복잡한 기능이 제공된다.

  • Java 2D API : 그림, 이미지, 애니메이션 기능을 제공

  • 데이터 전송 : 자르기, 복사, 붙이기 , Drag and Drop 등 데이터 전송 기능 제공 + undo, redo

Container

자바에서 Container는 창의 역할을 한다.

  • 한 개 이상의 Container 위에 Component들이 올려질 영역

  • Container는 실제로는 Component보다 작은 개념

  • (예) Frame, Window, Panel, Dialog, Applet

  • (예) JFrame, JDialog, JApplet, JPanel, JScrollPane

Frame 생성 하기

방법1 : JFrame 객체 생성

import javax.swing.*;

public class FrameTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame f = new JFrame("Frame Test");
		f.setSize(300,200); //크기 지정
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //swing에만 존재한다. x버튼 클릭시 종료
		f.setVisible(true); // Container보이기
	}
}

방법2 : JFrame 상속

import javax.swing.*;

class FrameTest extends JFrame{

	public FrameTest() {
		setSize(300,200);
        //swing에만 존재한다. x버튼 클릭시 종료
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Practice Frame");
		setVisible(true);
	}
	
}

public class FrameTest1{
	public static void main(String[] args) {
		FrameTest f = new FrameTest();
	}
}

메소드 or 생성자

생성자 또는 메소드
설명

void add(Component c)

지정된 컴포넌트를 프레임에 추가

JMenuBar getJMenuBar()

이 프레임에 대한 메뉴를 얻는다.

void pack()

프레임의 크기를 추가된 컴포넌트들의 크기에 맞도록 조절한다.

void remove(Component c)

지정된 컴포넌트를 프레임에서 제거

void setDefaultCloseOperation()

사용자가 프레임을 닫을 때 수행된는 동작을 설정한다. 일반적으로 JFrame.EXIT_ON_CLOSE 로 지정

void setIconImage(Icon Image)

프레임이 최소화되었을 때의 아이콘 지정

void setLayout(LayoutManager layout)

프레임에 놓이는 컴포넌트들을 배치하는 배치 관리자 지정, 디폴트는 BorderLayout이다.

void setLocation(int x, int y)

프레임의 (x,y)좌표 지정

void setResizeable(boolean value)

프레임의 크기 변경 허용 여부

void setSize(int width, int height)

프레임의 크기 설정

void setMenuBar(JMenuBar menu)

현재 프레임에 메뉴바를 붙인다.

Panel

Component들이 가질 수 있는 컨테이너이다.(컴포넌트들을 붙일 수 있는 판)

메소드 & 생성자

생성자 or 메소드
설명

JPanel()

새로운 Panel 생성

JPanel(boolean isDoubleBuffered)

만약 매개변수가 참이면 더블 버퍼링 사용

JPanel(LayoutManager layout)

지정된 배치 관리자를 사용하는 Panel 생성

void add(Component c)

지정된 컴포넌트 Panel에 추가

void remove(Component c)

지정된 컴포넌트 Panel에 제거

void setLaytout(LayoutManager layout)

배치 관리자를 지정한다. 디폴트는 FlowLayout이다.

void setSize(int width, int height)

Panel의 크기 지정

void setLocation(int x, int y)

Panel의 위치 지정

void setToolTipText(String text)

사용자가 마우스를 Panel의 빈곳에 올려놓으면 팁을 표시

Component

실제로 Container 위에 올려져서 화면 구성을 담당하는 요소들이다.

  • (예) Button, TextField, TextArea, List

  • (예) JButton, JTextField, JChoice, JList, JMenu, JCheckbox, JScrollBar,JTextArea, JCanvas

Component 생성하기

import javax.swing.*;

class FrameTest extends JFrame{

	public FrameTest() {
        //버튼 생성, 추가
		JButton button  = new JButton("버튼");
		// Container위에 Component추가
        this.add(button);
        //
		setSize(300,200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Practice Frame");
		setVisible(true);
	}
	
}

모양을 설정하는 메소드

메소드
설명

void setBorder(Border) Border getBorder()

컴포넌트의 테두리를 설정하거나 가져온다.

void setBackground(Color) Color getBackground()

컴포넌트의 배경색를 설정하거나 가져온다.

void setForeground(Color) Color getForeground()

컴포넌트의 전경색를 설정하거나 가져온다.

void setOpaque(boolean) Boolean IsOpaque()

컴포넌트의 불투명을 설정하거나 불투명상태를 확인한다.

void setFont(Font) Font getFont()

컴포넌트의 글꼴을 설정하거나 가져온다.

void setCursor(Cursor) Cursor getCursor()

컴포넌트에 마우스 커서를 가져갔을 때 보이는 커서 모양을 설정하거나 가져온다.

Label

편집이 불가능한 텍스트를 표시한다.

메소드
설명

String getText()

Label의 텍스트 반환

void setText()

Label의 텍스트 설정

void setToolTipText(String text)

사용자가 마우스를 Label의 위에 올려놓으면 팁을 표시

void setVisible(boolean value)

Label을 보이게 하거나 감춘다.

Button

사용자가 클릭했을 경우, 이벤트를 발생하여 원하는 동작을 하게 하는데 이용된다.

메소드
설명

String getText()

버튼의 현재 텍스트 반환

void setText(String text)

버튼의 텍스트 설정

void doClick()

사용자가 버튼을 누른 것 처럼 이벤트 발생

void setBorderPanited(boolean value)

버튼의 경계를 나타내거나 감춘다.

void setContentAreaFilled(boolean value)

버튼의 배경을 채울 것인지 지정

void setEnable(boolean value)

버튼을 활성화 하거나 비활성화

void setRolloverEnabled(boolean value)

마우스가 버튼 위에 있으면 경계를 진하게 하는 rollover 효과 설정

void setToolTipText(String text)

사용자가 마우스를 버튼위에 올려놓으면 팁을 표시

void setVisible(boolean value)

버튼을 보이게 하거나 감춘다.

Text Field

입력이 가능한 한줄의 텍스트 필드를 만드는데 사용한다.

생성자 or 메소드
설명

JTextField()

TextField 생성

JTextField(int columns)

지정된 칸수를 가지고 있는 TextField 생성

JTextField(String text)

지정된 문자열로 초기화된 TextField 생성

String getText()

TextField에 입력된 문자열 반환

void setText(String text)

TextField에 텍스트 쓰기

void setEditable(boolean) boolean isEditable()

사용자가 텍스트를 입력할 수 있는지 없는지 설정하고 반환

여러가지 Component 생성하기

class FrameTest extends JFrame{

	public FrameTest() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Practice Component");
		this.setLayout(new FlowLayout());
		
		//한줄을 입력하기위한 텍스트 필드 + 10은 초기열 크
		JTextField txt1 = new JTextField(10);
		this.add(txt1);
		
		// 여러줄 입력하기 위한 텍스트 영역(행, 열)
		JTextArea txt2 = new JTextArea(5,10);
		this.add(txt2);
		//textarea 영역에 스크롤바 추가 
		this.add(new JScrollPane(txt2));
		
		//비밀번호 필드 
		JPasswordField txt3 = new JPasswordField(10);
		this.add(txt3);
		
		setSize(200,200);
		setVisible(true);
	}
	
}
class FrameTest extends JFrame{

	public FrameTest() {
		ImageIcon img1 = new ImageIcon("~/Downloads/aa.jpg");
		ImageIcon img2 = new ImageIcon("~/Downloads/aa.jpg");
		
		//버튼에 이미지와 문자가 모두 나타나도록 설정 
		JButton btn1 = new JButton("버튼1",img1);
		
		//Label을 이미지 또는 문자로 생성 
		JLabel lbl1 = new JLabel("Label 입니다.");
		JLabel lbl2 = new JLabel(img2);
		
		//체크박스 3개 생성 + true가 된곳은 체크가 되도록 설정 
		JCheckBox chk1 = new JCheckBox("C++");
		JCheckBox chk2 = new JCheckBox("Ruby");
		JCheckBox chk3 = new JCheckBox("Java",true);
        
        //단일선택 체크박스
        JCheckboxGroup group = new JCheckboxGroup();
		JCheckbox man = new JCheckbox("남자" , true, group);
		JCheckbox woman = new JCheckbox("여자" , false, group);
		
		JRadioButton rdo1 = new JRadioButton("고래 ");
		JRadioButton rdo2 = new JRadioButton("상어  ");
		JRadioButton rdo3 = new JRadioButton("새우  ");

	}
	
}

LayoutManager

Container 위에 Component들을 올릴 때 자리 배치 방법

  • (예) FlowLayout, BorderLayout , GridLayout , CardLayout , GridBackLayout ...

Layout 설정 형식

Container.setLayout(new 레이아웃종류());

Flow Laytout

기본적으로 component들이 왼쪽에서 오른쪽으로 추가되는 형태이다.

Container의 크기가 변하면 component의 크기는 그대로 이며, 위치가 변경된다. 가운데 정렬이 기본이다.

  • Panel, Applet

import java.awt.FlowLayout;

import javax.swing.*;

class FrameTest extends JFrame{

	public FrameTest() {
		JButton button  = new JButton("버튼");
		this.add(button);
		setSize(300,200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Practice Frame");
        // FlowLayout설정
		setLayout(new FlowLayout());
		setVisible(true);
	}
	
}

Border Laytout

기본적으로 컴포넌트들이 틀 형태로 존재한다.

Border Layout에 component를 추가할 때는 this.add(컴포넌트, 위치); 를 지정해줘야한다. 위치를 지정해주지 않으면 Default값은 Center이다.

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.*;

class FrameTest extends JFrame{

	public FrameTest() {
		
		JButton button  = new JButton("버튼");
		this.add(button,BorderLayout.NORTH);
		setSize(300,200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Practice Frame");
		setVisible(true);
	}
	
}

Grid Layout

테이블 형태의 레이아웃이다. 인수를 주지 않으면 행은 1행으로 고정되고 열이 계속해서 추가된다.

행/열 인수에 0이 들어갈 수 있다.

  • ex) (2,0)이면 행은 2행으로 고정, 열은 무한대

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.LayoutManager;

import javax.swing.*;

class FrameTest extends JFrame{

	public FrameTest() {
		
		JButton[] b  = new JButton[6];
		setLayout(new GridLayout(3,2));
		for(int i=0;i<b.length;i++) {
			b[i] = new JButton("button"+i);
			this.add(b[i]);
		}
		
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Practice Frame");
		setVisible(true);
	}
	
}

Card Layout

구체적인 위치 정하기

setLayout에는 null로 지정한 후 setBounds로 직접적인 좌표값을 지정할 수 있다.

setLayout(null);
setBounds(0,0,0,0);

복합적인 레이아웃 설정하기

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.LayoutManager;

import javax.swing.*;

class FrameTest extends JFrame{

	public FrameTest() {
		
		JPanel pane = new JPanel();
		JButton[] b  = new JButton[4];
		for(int i=0;i<b.length;i++) {
			b[i] = new JButton("button"+i);
		}
		pane.add(b[0]);
		pane.add(b[1]);
		this.add(pane,"North");
		this.add(b[2],"West");
		this.add(b[3],"Center");
		
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Practice Frame");
		setVisible(true);
	}
	
}

public class FrameTest1{
	public static void main(String[] args) {
		FrameTest f = new FrameTest();
	}
}

이벤트 처리

  • 이벤트(event) : 마우스로 클릭하거나 키보드로 누르는 일련의 모든 작동

  • 리스너(Listener) : 사용자가 마우스를 클릭하거나 키보드를 누를 때까지 기다리는 것

버튼을 누른다 -> 이벤트 객체가 발생 -> 이벤트 처리(이벤트 리스너 객체)

즉, 버튼에 반응하려면 이벤트 처리를 해야한다.

액션 이벤트 actionPerformed()

  • 이벤트를 발생시키는 Component(버튼)가 있어야한다.

  • 이벤트 발생 감지 방법 : Listener 인터페이스를 달아준다.

    • 클래스에서 implements 시켜 method를 구현 방법

    MyClass implements ActionListener{
        public void actionPerformed(ActionEvent e){
            //꼭 구현해야하는 메소드
            //Action 이벤트를 처리하는 코드가 여기에 들어간다.
        }
    }
    • new로 생성하여 Component마다 리스너를 붙이는 방법

    button1.addActionListener(new ActionListener(){메소드 구현..});

Event Listener 위치

  • 별도의 클래스로 Event Listener를 작성

    • 별도의 클래스를 두어 이벤트 동작만을 위한 처리를 작성하게 할 수 있다.

    • 별도의 클래스이기때문에 클래스간 변수를 사용하도록 처리해주어야한다.

MyClass implements ActionListener{
    public void actionPerformed(ActionEvent e){
        //꼭 구현해야하는 메소드
        //Action 이벤트를 처리하는 코드가 여기에 들어간다.
    }
}
public class MyFrame extends JFrame{
    ...
    public MyFrame(){
        JPanel panel = new JPanel();
		btn= new JButton("버튼");
		btn.addActionListener(new MyListener());
		panel.add(btn);
		this.add(panel);
		this.setVisible(true);
    }
}
  • 내부 클래스로 Event Listener를 작성

    • 위와 같이 별도로 클래스를 만들면 MyFrame안의 멤버 변수를 쉽게 사용할 수 없으므로 내부 클래스를 만들어줄 수 있다.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

class MyFrame extends JFrame{
	private JButton btn;

	public MyFrame() {
		this.setSize(300,200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle("내부 클래스 이용하기");
		
		JPanel panel = new JPanel();
		btn= new JButton("버튼");
		btn.addActionListener(new MyListener());
		panel.add(btn);
		this.add(panel);
		this.setVisible(true);
	}
	private class MyListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			if(e.getSource()==btn) {
				btn.setText("클릭됨");
			}
		}
	}
	
}

public class TestCS {
	public static void main(String[] args) {
		MyFrame f = new MyFrame();
		
	}
}
  • 프레임 클래스가 Event Listener를 구현하도록 작성

    • public class Simple extends JFrame implements ActionListener{…} 의 형태로 actionPerformed를 구현할 수 있다.

    • 각 컴포넌트들이 공통된 동작을 하는 것이 아니라 다양한 동작을 할대는, 각 컴포넌트에서 Event Listener룰 구현하도록한다.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

class MyFrame extends JFrame implements ActionListener{
	private JButton btn;

	public MyFrame() {
		this.setSize(300,200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JPanel panel = new JPanel();
		btn= new JButton("버튼");
		btn.addActionListener(this);
		panel.add(btn);
		this.add(panel);
		this.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==btn) {
			btn.setText("클릭됨");
		}
        //버튼이 여러개라면 if then else가 길어지는 형태이다.
	}
}

public class TestCS {
	public static void main(String[] args) {
		MyFrame f = new MyFrame();
		
	}
}
  • 각 컴포넌트들이 Event Listener를 구현하도록 작성

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

class MyFrame extends JFrame implements ActionListener{
	private JButton btn;

	public MyFrame() {
		this.setSize(300,200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JPanel panel = new JPanel();
		btn= new JButton("버튼");
		btn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(e.getSource()==btn) {
					btn.setText("클릭됨");
				}
			}
		});
		panel.add(btn);
		this.add(panel);
		this.setVisible(true);
    }
}

public class TestCS {
	public static void main(String[] args) {
		MyFrame f = new MyFrame();
		
	}
}

이벤트의 분류

모든 Component가 지원하는 이벤트

이벤트 종류
설명

Component

컴포넌트의 크기나 위치가 변경되었을 경우 발생

Focus

키보드 입력을 받을 수 있는 상태 또는 그 반대의 경우 발생

Container

컴포넌트가 컨테이너에 추가되거나 삭제될 때 발생

Key

사용자가 키를 눌렀을 때 키보드 Focus를 가지고 있는 객체에서 발생

Mouse

마우스 버튼이 클릭되거나 마우스가 객체의 영역으로 들어오가나 나올때 발생

MouseMotion

마우스가 움직였을 때 발생

MouseWheel

컴포넌트 위에서 마우스 휠을 움직이는 경우 발생

Window

윈도우에 어떤 변화(열림, 닫힘, 아이콘화 등)가 있을 때 발생

일부 Component가 지원하는 이벤트

이벤트 종류
설명

Action

사용자가 어떤 동작을 하는 경우 발생

Caret

텍스트 삽입점이 이동하거나 텍스트 선택이 변경되었을 경우 발생

Change

일반적으로 객체의 상태가 변경되었을 경우 발생

Document

문서의 상태가 변경되는 경우 발생

Item

선택 가능한 컴포넌트에서 사용자가 선택한 경우 발생

ListSelection

리스트나 테이블에서 선택 부분이 변경된 경우 발생

Action Event

  • 사용자가 버튼 클릭하는 경우

  • 사용자가 메뉴 항목을 선택하는 경우

  • 사용자가 텍스트 필드에서 엔터키를 누르는 경우

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

class MyFrame extends JFrame{
	private JButton btnYellow,btnPink;
	private JPanel panel;

	public MyFrame() {
		this.setSize(300,200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		panel = new JPanel();
		btnYellow= new JButton("Yellow");
		btnYellow.addActionListener(new MyListener());
		panel.add(btnYellow);
		btnPink= new JButton("Pink");
		btnPink.addActionListener(new MyListener());
		panel.add(btnPink);
		
		
		this.add(panel);
		this.setVisible(true);
		
	}
	private class MyListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			if(e.getSource()==btnYellow) {
				panel.setBackground(Color.YELLOW);;
			}else if(e.getSource()==btnPink) {
				panel.setBackground(Color.PINK);;
			}
		}
	}
}

public class TestCS {
	public static void main(String[] args) {
		MyFrame f = new MyFrame();
		
	}
}
  • getSource() 메소드를 이용해 이벤트를 발생시킨 객체를 식별한다.

  • getId() 메소드를 이용해 이벤트의 타입을 식별한다.

  • getActionCommand() 메소드를 이용해 이벤트를 발생시킨 컴포넌트의 이름을 식별한다.

Key Event

keyListener 인터페이스를 구현한다.

메소드
설 명

keyTyped(KeyEvent e)

사용자가 글자를 입력했을 경우에 호출

keyPressed(KeyEvent e)

사용자가 키를 눌렀을 경우에 호출

keyReleased(KeyEvent e)

사용자가 키에서 손을 떼었을 경우에 호출

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class KeyEventPractice extends JFrame implements KeyListener{
	
	public KeyEventPractice() {
		
		this.setSize(300,300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JTextField tf = new JTextField(20);
		tf.addKeyListener(this);
		this.add(tf);
		this.setVisible(true);
		
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		display(e, "key typed");
	}

	
	@Override
	public void keyPressed(KeyEvent e) {
		display(e, "key pressed");
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		display(e, "key Released");
	}
	private void display(KeyEvent e, String string) {
		// TODO Auto-generated method stub
		 char c = e.getKeyChar();
         int keyCode = e.getKeyCode();
         String modifiers = e.isAltDown() + " " + e.isControlDown() + " " +e.isShiftDown();
         System.out.println(string + " " + c + " " + keyCode + " " + modifiers);

	}	
}

Mouse 이벤트

메소드
설 명

mouseClicked(MouseEvent e)

사용자가 컴포넌트를 마우스로 클릭한 경우에 호출된다.

mouseEntered(MouseEvent e)

마우스 커서가 컴포넌트의 경계안으로 커서가 들어가면 호출된다.

mouseExited(MouseEvent e)

마우스 커서가 컴포넌트의 경계밖으로 커서가 나가면 호출된다.

mousePressed(MouseEvent e)

마우스가 컴포넌트위에서 눌려지면 호출된다.

mouseReleased(MouseEvent e)

마우스가 컴포넌트위에서 떼어지면 호출된다.

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MouseEventPractice extends JFrame implements MouseListener{
	MouseEventPractice(){
		this.setSize(300,300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
        JPanel panel = new JPanel();
        panel.addMouseListener(this);  
        add(panel);
        setVisible(true);

	}
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		display("Mouse clicked (# of clicks: " + e.getClickCount() + ")", e);
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		display("Mouse pressed (# of clicks: " + e.getClickCount() + ")", e);
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		display("Mouse released (# of clicks: " + e.getClickCount() + ")", e);
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
        display("Mouse entered", e);
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
        display("Mouse exited", e);
	}
	
    protected void display(String s, MouseEvent e) {
        System.out.println(s + " X=" + e.getX() + " Y=" + e.getY());
  }
}

Mouse의 좌표 얻기

메소드
설명

int getClickCount()

빠른 연속적인 클릭의 횟수를 반환한다. 예를 들어 2이면 더블 클릭을 의미한다.

int getX() int getY() Point getPoint()

이벤트가 발생했을 당시의 (x,y) 위치를 반환한다. 위치는 컴포넌트에 상대적이다.

int getXOnScreen() int getYOnScreen() int getLocationOnScreen()

절대 좌표 값 (x,y)을 반환한다. 이들 좌표값은 가상 화면에 상대적이다.

int getButton()

어떤 마우스 버튼의 상태가 변경되었는지를 반환한다. NOBUTTON, BUTTON1, BUTTON2, BUTTON3 중의 하나이다.

boolean isPopupTrigger()

마우스 이벤트가 팝업 메뉴를 나타나게 하면 true를 반환한다.

String getMouseModifiersText(int)

이벤트 도중의 수식키와 마우스 버튼을 기술하는 설명문을 반환한다.

참조 페이지

border Layout에 대한 이미지 검색결과
card Layout에 대한 이미지 검색결과

http://programmingsummaries.tistory.com/61