java 57

자바 ArrayList

ArrayList는 자바에서 가장 많이 사용되는 데이터 스트럭쳐이다. 생성 ArrayList numbers = new ArrayList(); ArrayList는 java.util.ArrayList에 포함되어 있으므로 import 해준다. 추가 element를 추가할때는 add 메소드를 사용한다. add는 단순히 배열 뒤에 데이터를 더하기 때문에 빠르다. numbers.add(19); numbers.add(40); 자바 배열의 크기는 고정되어 있다. 내부의 배열이 꽉 찼는데 새로운 데이터를 추가하려면 기존 배열보다 2배 긴 새 배열을 만들어, 기존 데이터를 새로운 배열로 복제해야한다. 덕분에 프로그래머는 ArrayList의 크기를 신경쓰지 않아도 된다. 하지만 배열의 크기를 키우는 데는 많은 부하가 걸린다..

java/자료형 2019.05.25

Mouse와 MouseMotion 이벤트

마우스 이벤트(Mouse Event)는 사용자가 마우스 버튼을 누르거나 마우스를 움직일 때 발생한다. 사용자가 버튼을 누르거나 메뉴를 선택할 때는 마우스 이벤트를 처리할 필요가 없다(앞에서 학습한대로 이러한 경우는 액션 이벤트로 처리하면 된다). 하지만 사용자가 화면에 마우스로 그림을 그리게 하려면 마우스 이벤트를 처리하여야 한다. 마우스 버튼의 클릭을 처리하려면 MouseListener를 구현하여서 MouseEvent를 받으면 된다. 마우스가 이동할 때 마우스의 위치를 받으려면 MouseMotionListener를 구현하여서 MouseMotionEvent를 받아야 한다. 마우스에 대한 이벤트를 이렇게 분리하는 이유는 마우스의 움직임을 추적하는 것이 시스템의 오버헤드를 증가시키기 때문이다. MouseLi..

키 이벤트

키 이벤트(key event)는 사용자가 키보드를 이용하여 입력을 하는 경우에 발생한다. 키를 누를 때도 발생하지만 키에서 손을 떼는 경우에도 발생한다. 어떤 클래스가 키보드 이벤트를 처리하려면 keyListener 인터페이스를 구현하여야 한다. KeyListener 인터페이스는 다음과 같은 가상 메소드를 가지고 있다. public class MyListener implements KeyListener { public void keyPressed(KeyEvenet e) { } // 사용자가 키를 눌렀을 경우에 호출 public void keyReleased(KeyEvent e) { } // 사용자가 키에서 손을 떼었을 경우에 호출 public void keyTyped(KeyEvent e) { } // 사..

java/GUI 2019.05.22

람다식

람다식(lambda expression)은 이름이 없는 메소드(함수)라고 할 수 있다. 우리가 람다식을 사용하는 이유는 간결함 때문이다. 람다식을 이용하면 메소드가 필요한 곳에 간단히 메소드를 보낼 수 있다. 특히 메소드가 딱 한번만 사용되고 메소드의 길이가 짧은 경우에 유용하다. 이전 버전의 자바에서는 메소드를 객체로 만들 수 있는 방법이 없었다. 하지만 JDK8부터는 함수를 객체로 만들 수 있다. import javax.swing*; import java.awt.event.*; public class MyFrame extends JFrame { private JButton button; private JLabel label; int counter = 0; public MyFrame() { this.s..

여러 가지 이벤트 처리 방법

1. 프레임 클래스가 이벤트를 처리 import javax.swing.*; import java.awt.event.*; public class event extends JFrame implemets ActionListener { private JButton button; private JLabel label; int counter = 0; //event 클래스는 JFrame클래스를 상속받고 동시에 ActionListener를 구현한다. 따라서 프레임이 버튼에서 발생하는 이벤트도 처리할 수 있다. public void actionPerformed(ActionEvent e) { counter ++; label.setText("현재의 카운터값 : "+ counter); } // event클래스 안에 actio..

이벤트란?

이벤트란? 일반적인 프로그램은 알고리즘에 따라서 문장들을 차례대로 실행하여 작업을 진행하지만, GUI 프로그램에서는 버튼과 같은 컴포넌트들을 화면에 배치한 후에, 사용자의 입력을 기다리고 있다가, 사용자가 특정 버튼을 누르면 작업이 진행된다. 이와같이 어떤 이벤트가 일어나는지를 감시하고 있다가 이벤트가 발생하면 적절한 처리를 해주는 프로그래밍 방식을 이벤트-구동 프로그래밍(event-driven programming)이라고 한다. 이벤트는 누가 처리하는가? 객체 지행 프로그램에서는 모든 작업을 객체(object)가 한다. 이벤트 처리도 객체가 한다. 이벤트를 처리하는 클래스를 정의하고 이 클래스의 객체 A를 생성한다면, 이 객체를 가지고 이벤트를 발생하는 객체 B(예를 들어 버튼)에 등록하면 된다. 차후..

자바 기초 컴포넌트들

레이블(JLabel) : 텍스트를 표시할 수 있는 공간 텍스트필드(JTextField) : 사용자가 한 줄의 텍스트를 입력할 수 있는 공간 버튼(JButton) : 클릭되면 어떤 동작을 실행하는 버튼 레이블 컴포넌트 중에서 아마 가장 간단한 것이다. 레이블은 편집이 불가능한 텍스트를 표시하기 위한 컴포넌트이다. 레이블은 다양한 용도로 사용되는데 컴포넌트들의 캡션을 표시하거나 도움이 되는 정보 또는 계산의 결과를 표시하는데 사용될 수 있다. 레이블은 텍스트와 이미지를 동시에 표시할 수 있다. 또한 레이블에 나타나는 텍스트의 속성은 변경할 수 있다. 즉 폰트의 종류, 크기, 색상 등은 변경가능하다. 텍스트 필드 텍스트 필드(text field)는 사용자가 한 줄의 텍스트를 입력할 수 있는 기본적인 텍스트 콘..

java/GUI 2019.05.11

패널 사용하기

패널(panel)은 컴포넌트들을 포함하고 있도록 설계된 컨테이너 중의 하나이다. 레이블이나 버튼과 같은 컴포넌트들을 화면에 표시하는 일반적인 방법은 패널에 이들 컴포넌트를 추가하고 그 패널을 프레임에 추가하는 것이다. 물론 패널을 쓰지않고 프레임에 컴포넌트들을 직접 추가할 수도 있지만 별도의 패널을 쓰는 것이 유지보수 및 배치관리에 좋은 경우게 많다. 예를들어서 다음과 같이 화면을 2개로 나누어서 표시하고자 할 때 패널을 사용할 수 있다. 패널도 컨테이너의 일종이므로 setLayout(LayoutManager layout)을 호출하여 배치관리자를 설정할 수 있다. JPanel panel = new JPanel(); panel.setLayout(new GirdLayout(3, 3)); 패널에서 가장 중요한..

java/GUI 2019.05.11

배치 관리자

버튼과 같은 자식 컴포넌트들은 컨테이너 내부에 배치된다. 프로그래머가 절대 좌표값으로 자식 컴포넌트의 위치를 지정할 수도 있다. 그러나 절대 위치를 사용하여 컴포넌트들을 배치할 경우, 플랫폼에 따라서 프로그램의 모습이 상당히 달라질 수 있다. 이러한 문제점을 해결하기 위하여 자바에서는 배치 관리자(layout manager)을 사용한다. 배치 관리자는 컨테이너 안에 존재하는 컴포넌트들의 크기와 위치를 자동적으로 관리하는 객체이다. java.awt 패키지에는 여러 가지의 배치를 제공하는 배치 관리자가 제공된다. BorderLayout 컴포넌트들이 5개의 영역인 North, South, East, West, Center 중 하나로 추가된다. 프레임, 애플릿, 대화 상자와 같은 최상위 컨테이너의 디폴트 배치 ..

java/GUI 2019.05.11