1. 메뉴바 만들기
1) MenuBar : 메뉴 컴퍼넌트를 부착하기 위한 컨테이너 역할을 하는 컴퍼넌트
2) Menu : 메뉴아이템 컴퍼넌트를 부착하기 위한 컨테이너
3) MenuItem : 선택기능을 제공하기 위한 컴퍼넌트
- MenuShortcut 클래스 : [ctrl] + [문자] 를 이용하여 단축키를 등록 할 수 있도록 해준다.
- KeyEvent 클래스 : 키보드 관련 이벤트 정보를 저장하기 위한 클래스이다. 키보드에 대한 문자값을 상수필드로 제공한다. (VK_0같은거, 방향키 같은거는 문자값이 없으므로 이렇게 상수필드를 사용하는 것을 권장)
2. Swing이용하기
- 프레임에 직접디자인하지 않고, 컨테이너에 디자인을 한다 -> 유지보수가 쉬워진다( 컨테이너를 바꾸면 그만이니까)
- 스크롤이 있는 컨테이너를 사용하고 싶다면 ScrollPane을 이용하면 된다.
awt와 swing 둘 다 공통적으로 , 기본적인 ActionEvent가 발생되는 경우
1. Button컴퍼넌트를 누르는 경우
2. MenuItem 컴퍼넌트를 선택한 경우
3. TextField컴퍼넌트에서 엔터를 입력한 경우
=> 이벤트 소스를 컴퍼넌트의 자료형으로 구분하도록 한다.
[awt를 이용하여 이벤트 핸들러 만들기]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
@Override
public void actionPerformed(ActionEvent e) {
//Event.getSource() : 이벤트 소스(컴퍼넌트)를 반환하는 메소드
//=>이벤트 소스는 Object타입으로 변환
Object eventSource = e.getSource();//이벤트가 발생한 컴포넌트가 저장되어있음
//이벤트 소스를 컴퍼넌트의 자료형으로 구분
if(eventSource instanceof MenuItem) {//이벤트 소스가 버튼이냐~?
if(eventSource == init) {
//Component.setText() : 컴포넌트의 문자열을 변경하는 메소드
area.setText("");
}else if(eventSource == exit) {
System.exit(0);
}
}else if(eventSource instanceof TextField) {
//Component.getText() : 컴포넌트의 문자열을 반환하는 메소드
String text = field.getText();//엔터를 제외한 문자열을 반환
//반환받은 문자열의 문자가 존재할 경우
if(!text.equals("")) {
//TextArea.append(String s) : 문자열을 TextArea컴포넌트에 추가하는 메소드
area.append("[이주영] " + text + "\n"); //기존에 잇던거 건들지않고 해당애만 추가(set은 전체 싹 갈아엎는거)
field.setText("");
}
}else if(eventSource instanceof Button) {
red.setEnabled(true);
green.setEnabled(true);
blue.setEnabled(true);
black.setEnabled(true);
((Button) eventSource).setEnabled(false);//명시적 형변환
if(eventSource == red) {
area.setForeground(Color.RED);
}else if(eventSource == green) {
area.setForeground(Color.green);
}else if(eventSource == blue) {
area.setForeground(Color.blue);
}else if(eventSource == black) {
area.setForeground(Color.black);
}
}
}
}
|
cs |
awt를 이용한 이벤트 핸들러에서 자주쓰는 메소드
메소드 | 기능 |
Event.getSource() 이거는 Swing도 동일. |
이벤트 소스(컴퍼넌트)를 반환하는 메소드 단, 이벤트 소스는 Object타입으로 변환해야한다. |
✨ Object eventSource = e.getSource();//이벤트가 발생한 컴포넌트가 저장되어있음 | |
Component.setText() |
컴포넌트의 문자열을 메소드변경하는 메소드 |
area.setText(""); | |
Component.getText() |
컴포넌트의 문자열을 반환하는 메소드 |
String text = field.getText(); //엔터를 제외한 문자열을 반환 | |
TextArea.append(String s) |
문자열을 TextArea컴포넌트에 추가하는 메소드 |
area.append(text); //기존에 잇던거 건들지않고 해당애만 추가(set은 전체 싹 갈아엎는거) field.setText(""); |
swing를 이용한 이벤트 핸들러에서 자주쓰는 메소드
메소드 | 기능 |
setDefaultsetDefaultCloseOperation (Integer operation) |
프레임의 닫기 버튼을 누른 경우 동작될 기능을 변경하는 메소드 |
DO_NOTHING_ON_CLOSE(WindowConstants) : 아무런 동작도 실행되지 않도록 설정 |
|
EXIT_ON_CLOSE(Jframe) : 무조건 프로그램이 종료되도록 설정 |
|
HIDE_ON_CLOSE(default) : 프레임 숨기도록 설정 |
|
DISPOSE_ON_CLOSE(WindowConstants) : 메모리 정리 후 프로그램이 종료 |
|
setDefaultCloseOperation(EXIT_ON_CLOSE); //JFrame이 갖고있는 기능 | |
setMnemonic(character c) |
키보드로 메뉴선택을 할 수 있도록 하는 메소드 |
1) alt + 문자로 메뉴 선택 2) 라벨명에 존재하는 문자열의 경우 언더바가 표시됨 3) JmenuItem 컴퍼넌트는 Numeric 기능을 생성자로 부여가능 |
|
menu.setMnemonic('F'); init = new JMenuItem("초기화(I)", 'I'); //awt와는 다르게 단축키를 입력할 수 없기 때문에 accelerator이용해야함 |
|
setAccelerator(keyStroke) |
JmenuItem컴포넌트단축키를 부여하는 메소드 |
1) keyStroke : 기능키와 문자를 저장하기 위한 클래스 2) KeyStroke.getKeyStroke(int keyCode, int modifiers) : 문자와 기능키가 등록된 키스트로크 인스턴스를 반환하는 메소드 |
|
init.setAccelerator (KeyStroke.getKeyStroke(KeyEvent.VK_I , InputEvent.CTRL_DOWN_MASK + InputEvent.SHIFT_DOWN_MASK)); |
|
getContentPane() |
프레임의 Container 인스턴스를 반환하는 메소드 |
- 프레임에 직접디자인을 하지 않고, 프레임의 컨테이너를 이용하여 디자인처리 |
3. Paint(Graphics) 이용하기
package site.itwill.swing;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
public class PaintApp extends JFrame {
private static final long serialVersionUID = 1L;
//마우스 버튼을 클릭한 위치의 좌표값을 저장하기 위한 필드(이벤트 핸들러에서 써먹기 위함)
private int x, y;
public PaintApp(String title) {
super(title);
//프레임에서 발생되는 MouseEvent를 처리하기 위한 이벤트 핸들러 등록
//=> 마우스어댑터 클래스를 어노미머스 이너 클래스로 작성하여 등록
addMouseListener(new MouseAdapter() {
//마우스 버튼을 클릭할 경우 자동 호출되는 이벤트 핸들러 메소드
@Override
public void mouseClicked(MouseEvent e) {
//MouseEvent.getX() : 클릭한 위치의 X좌표값을 반환하는 메소드
x = e.getX();
//MouseEvent.getY() : 클릭한 위치의 Y좌표값을 반환하는 메소드
y = e.getY();
//window.repaint() : paint메소드를 호출하는 메소드
//=> paint메소드를 직접호출 할 수 없으므로 제공되는 메소드
repaint();
}
});
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(500, 300, 300, 400);
setVisible(true);
}
//window paint(Graphics g) : 컨테이너(JFrame, JDialog,Jwindow 등)를 출력하는 메소드
//=> paint()메소드는 컨테이너 관련 이벤트가 발생될 경우 자동으로 발생
//=> 프로그램이 실행될 경우
//=> 컨테이너가 활성화 될 경우
//=> 컨테이너의 크기가 변경될 경우
// Graphics : 그림을 그리기 위한 기능을 제공하는 클래스
@Override
public void paint(Graphics g) {
//ystem.out.println("["+ Thread.currentThread().getName()+"]");
//부모클래스의 숨겨진 메소드를 호출하라 => 화면 초기화가 일어남
super.paint(g);//원래는 update메소드가 있는데 swing은 없기 때문에 super을 이용하여 초기화를 한다.
/*g.setColor(Color.RED);
g.drawRect(20, 40, 50, 50);
g.fillRect(20, 100, 50, 100);
g.setColor(Color.blue);
g.drawOval(125, 175, 50, 50);
g.fillOval(100, 100, 100, 50);
g.setColor(Color.GREEN);
g.drawString("홍길동", 100, 300);*/
g.drawString("[" + x + " , " + y + "]", x, y);
}
public static void main(String[] args) {
new PaintApp("제목");
}
}
'💻 수업정리 (2020) > 자바' 카테고리의 다른 글
[6/8] java.io패키지 (0) | 2020.06.08 |
---|---|
[6/4] 버튼입력받아 계산기 만들기 (0) | 2020.06.04 |
[6/2] LayoutManager과 EventHandler (0) | 2020.06.02 |
[6/1] 자료구조클래스와 awt패키지 (0) | 2020.06.01 |
[5/29] java.util패키지 (0) | 2020.05.29 |