안녕하세요? 이번 시간에도 마찬가지로 저번시간에 이어서 Java GUI 이벤트 처리에 대해서 알아보겠습니다.
1. 이벤트(Event)
- GUI 컴포넌트에서 발생되는 모든 행위
- 예를 들어 버튼을 클릭하거나 윈도우 종료단추를 클릭하는 행동
- ActionEvent(JButton, JTextField, JCheckBox, JFileChooser, JMenuItem, JRadioButton..)
- 버튼이 클릭되거나 리스트, 메뉴 등이 선택되었을 때 발생하는 이벤트
- ActionListener 인터페이스의 actionPerformed(ActionEvent) 메서드를 이용해서 처리
필드명 | 해당 키 |
ALT_MASK | ALT 키 |
CTRL_MASK | Ctrl 키 |
SHIFT_MASK | Shifit 키 |
메소드 | 해당 키 |
getActionCommand() | 이벤트를 발생시킨 객체의 문자열을 가져온다 |
getSource() | 이벤트를 발생시킨 객체의 위치값을 가져온다. |
getModifiers() | 이벤트가 발생되었을 때 같이 사용된 modifier키들을 가져온다. |
- KeyEvent(JFrame, JButton, JTextField, JTextAread..)
- 키보드를 통해서 키 입력이 오면 발생
- KeyListener 인터페이스나 KetAdapter 추상클래스를 이용
- 이벤트 처리 메소드
- keyPressed(KeyEvent e) : 컴포넌트에서 키가 눌러지면 호출
- keyReleased(KetEvent e) : 키에서 뗄 때 호출
- ketTyped(KeyEvent e) : 키보드를 통해 문자가 입력되었을 때 호출
필드명 | 해당 키 |
VK_0 ~ VK_9 | 숫자 0~9 |
VK_A ~ VK_Z | 영문자 A~Z |
VK_F1 ~ VK_F24 | 기능키 F1 ~ F24 |
VK_ENTER | 엔터 키 |
VK_SPACE | 스페이스바 키 |
VK_BACKSPACE | BackSpace 키 |
KEY_PRESSED | 키가 눌려진 이벤트 의미 |
KEY_RELEASED | 키가 눌렸다 놓아진 이벤트 의미 |
KEY_TYPED | 키 입력 이벤트 의미 |
메소드 | 내용 |
getKeyChar() | 이벤트에 의해 입력된 문자값을 가져온다. |
getKeyCode() | 이벤트에 의해 입력된 문자에 해당하는 코드값을 가져온다. |
- MouseEvent(JList를 제외한 거의 모든 컴포넌트)
- 마우스 버튼을 누르거나 특정 컴포넌트 안에 진입하거나 벗어날 때 호출되는 이벤트
- MouseListener 인터페이스나 MouseAdapter 추상 클래스를 이용해서 처리
- 메소드
- mouseClicked(MouseEvent e) : 마우스를 클릭했을 때 호출
- mouseEntered(MouseEvent e) : 마우스 커서가 컴포넌트 영역에 들어오면 호출
- mouseExited(MouseEvent e) : 마우스 커서가 컴포넌트 영역에서 벗어나면 호출
- mousePressed(MouseEvent e) : 마우스 버튼이 눌러지면 호출
- mouseReleased(MouseEvent e) : 마우스 버튼이 눌러졌다 띄어지면 호출
필드명 | 설명 |
MOUSE_CLICKED | 마우스 버튼이 클릭된 경우 발생되는 이벤트 |
MOUSE_ENTERED | 마우스 커서가 컴포넌트 영역으로 들어왔을 때 발생되는 이벤트 |
MOUSE_EXITED | 마우스 커서가 컴포넌트 영역 밖으로 나가면 발생되는 이벤트 |
MOUSE_PRESSED | 마우스 버튼이 눌러졌을 때 발생하는 이벤트 |
MOUSE_RELEASED | 마우스 버튼이 눌렀다 띄었졌을 때 발생하는 이벤트 |
MOUSE_DRAGGED | 마우스 버튼이 클릭된 상태에서 움직일 때 발생되는 이벤트 |
MOUSE_ MOVED | 마우스 커서가 움직일 때 발생되는 이벤트 |
메소드 | 내용 |
getClickCount() | 마우스 눌려진 횟수를 얻어온다. |
getPoint() | 마우스 이벤트가 발생한 좌표를 얻어온다. |
getX() | 마우스 이벤트가 발생한 X좌표를 얻어온다. |
getY() | 마우스 이벤트가 발생한 Y좌표를 얻어온다. |
- MouseMotionEvent(JList를 제외한 거의 모든 컴포넌트)
- 마우스를 움직이면 호출되는 이벤트
- MouseMotionListener 인터페이스 or MouseMotionAdapter 추상 클래스 이용
- 메소드
- mouseDragged(MouseEvent e) : 마우스 버튼이 눌러진 상태로 이동하면
- mouseMoved(MouseEvent e) : 마우스를 이동하면 호출
- WindowEvent(JFrame)
- 윈도우를 활성화, 아이콘화, 비활성화 작업 시 발생하는 이벤트
- WindowListener 인터페이스 or WindowAdapter 추상 클래스 이용
- 메소드
- windowOpened(WindowEvent e) : 윈도우가 열릴 때
- windowClosing(WindowEvent e) : 윈도우가 닫힐 때
- windowActivated(WindowEvent e) : 윈도우가 활성화 되었을 때
- windowDeactivated(WindowEvent e) : 윈도우가 활성화 되었을 때
- windowIconified(WindowEvent e) : 윈도우가 아이콘화 되었을 때
- windowDeiconfied(WindowEvent e) : 윈도우가 최소화 상태에서 원래도로 되돌아올 때
필드명 | 설명 |
WINDOW_ACTIVATED | 윈도우가 활성화될 때 발생 |
WINDOW_DEACTIVATED | 윈도우가 비활성화 될 때 발생 |
WINDOW_CLOSED | 윈도우가 닫힐 때 발생 |
WINDOW_CLOSING | 윈도우가 사용자의 요청으로 닫힐 때 발생 |
WINDOW_ICONIFIED | 윈도우가 아이콘화 될 때 발생 |
WINDOW_OPENDED | 윈도우가 생성될 때 발생 |
메소드 | 내용 |
getWindow() | 이벤트가 발생된 윈도우를 가져온다. |
- 이벤트 관련 객체
- Listener 인터페이스 - 하나 또는 2개 이상의 이벤트 처리를 위한 메소드를 소유한 인터페이스
- Adapter 클래스 - 2개 이상의 메소드를 가진 Listener를 변환한 추상 클래스
- 이벤트 처리
- 원하는 Listener를 클래스에 implements 하거나 Adapter 클래스를 상속
- 이벤트에 따라 호출되는 메소드 재정의
- 넘어오는 매개변수의 getSource()가 이벤트를 발생시킨 컴포넌트를 리턴
- 컴포넌트에 이벤트 리스너를 추가
- 이벤트 처리는 Anoymous Class를 이용해서 한번에 처리 가능
<Event 예제 소스코드1 - Event1.class>
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
47
48
49
|
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Event1 extends JFrame implements ActionListener
{
// 레이블과 버튼 정의
JLabel lbl;
JButton btn1, btn2;
public Event1(String str)
{
super(str);
lbl = new JLabel("버튼을 입려하세요.");
btn1 = new JButton("첫번째 버튼");
btn2 = new JButton("두번째 버튼");
// 버튼1,2를 ActionListener 사용하기
btn1.addActionListener(this);
btn2.addActionListener(this);
// 패널 생성
JPanel panel = new JPanel();
panel.add(btn1);
panel.add(btn2);
add("Center", panel);
add("South", lbl);
setSize(300, 200);
setVisible(true);
}
// 이벤트 발생시 행동하는 함수
public void actionPerformed(ActionEvent e)
{
Object obj = e.getSource();
if((JButton)obj == btn1)
{
lbl.setText("첫번째 버튼을 눌렀습니다.");
}
else {
lbl.setText("두번째 버튼을 눌렀습니다.");
}
}
}
|
<Event 예제 소스코드1 - Main.class>
1
2
3
4
5
6
|
public class Main{
public static void main(String[] args)
{
new Event1("ActionEvent 테스트");
}
}
|
<결과>
- 버튼 클릭을 리스너로 받아 이벤트 발생시 텍스트가 변함
<Event 예제 소스코드2 - Event2.class>
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Event2 extends JFrame
{
// 텍스트 필드와 체크박스 정의
JTextField text;
JCheckBox bold;
public Event2()
{
super("체크박스에서 Item처리");
// Container를 생성해 FlowLayout 생성
Container c = getContentPane();
c.setLayout(new FlowLayout());
// 텍스트 필드에 "너구리 해적단" 쓰기
text = new JTextField("너구리 해적단", 10);
text.setFont(new Font("굴림", Font.PLAIN, 14));
c.add(text);
bold = new JCheckBox("진하게");
c.add(bold);
// 체크박스 핸들러 생성
CheckBoxHandler handler = new CheckBoxHandler();
// 리스너를 만들어 핸들러 넣기
bold.addItemListener(handler);
setSize(300,100);
setVisible(true);
}
// 이벤트 발생시 처리될 메소드
public class CheckBoxHandler implements ItemListener
{
int valBold = Font.PLAIN;//보통 폰트
//[진하게]체크박스를 선택 또는 해제시 자동으로 실행
public void itemStateChanged( ItemEvent e ) {
//이벤트가 발생한 컴포넌트가 bold이면 실행
if ( e.getSource() == bold )
//아이템의 상태 변화가 체크박스 체크 이면
if ( e.getStateChange() == ItemEvent.SELECTED )
valBold = Font.BOLD; //글꼴 스타일 진하게
else
valBold = Font.PLAIN; //글꼴 스타일 보통으로
//지정한 폰트를 텍스트 상자에 적용
text.setFont( new Font( "굴림", valBold , 14 ) );
}
}
}
|
<Event 예제 소스코드2 - Main.class>
1
2
3
4
5
6
7
8
9
10
11
|
import javax.swing.JFrame;
public class Main extends JFrame
{
public static void main(String[] args)
{
Event2 item = new Event2();
item.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
|
<결과>
2. Pane
- 특정 목적에 맞도록 작성된 컴포넌트
- JEditorPane
- 여러 가지 형태의 문서를 보여줄 수 있는 컴포넌트
- 일반 텍스트나 html, rft 문서를 보여줄 수 있습니다.
- JTabbedPane
- 여러 패널을 담을 때 사용하는 컴포넌트
- 기능별로 분류된 옵션들을 동시에 보여 줄 필요가 없고, 필요 시 하나의 패널만 보여주기 위해서 사용하는 컴포넌트
- 사용 방법은 타이틀이나 아이콘을 가지는 탭을 클립함으로써 여러개의 패널 중에 선택된 탭을 보여줌
- 탭의 위치는 기본적으로 왼쪽 위에 위치
<JTabbedPane 예제 소스코드1 - JTabbedPaneTest.class>
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
|
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import java.awt.*;
public class JTabbedPaneTest extends JFrame
{
// 텝과 레이블 변수 선언
JTabbedPane tab;
JTable1 j1;
JTable2 j2;
public JTabbedPaneTest()
{
super("JTabbedPane 연습예제");
// 텝 생성과 위치 선정
tab = new JTabbedPane(JTabbedPane.TOP);
// 패널 생성
JPanel one = new JPanel();
j1 = new JTable1();
JPanel two = new JPanel();
j2 = new JTable2();
// 패널 추가
one.add(j1);
two.add(j2);
// 탭 명칭과 컴포넌트 추가
tab.addTab("기본 데이터", one);
tab.addTab("기타 데이터", two);
getContentPane().add(tab, BorderLayout.CENTER);
setSize(500, 200);
setVisible(true);
}
public static void main(String args[])
{
JTabbedPaneTest jt = new JTabbedPaneTest();
jt.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
|
<JTabbedPane 예제 소스코드2 - JTable1.class>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
// 첫 번째 탭
public class JTable1 extends JPanel
{
public JTable1(){
String title[] = {"번호", "이름", "나이"};
String data[][] = {
{"1","너구리", "26"},
{"2","돼 지", "25"},
{"3","족제비", "26"}
};
// 테이블 생성
JTable table = new JTable(data, title);
JScrollPane sp = new JScrollPane(table);
add(sp);
}
}
|
<JTabbedPane 예제 소스코드3 - JTable2.class>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
// 두 번째 탭
public class JTable2 extends JPanel
{
public JTable2(){
String title[] = {"번호", "직업", "소속"};
String data[][] = {
{"1","프로그래머", "네이X"},
{"2","백수", "집"},
{"3","디자이너", "엔X소X트"}
};
// 테이블 생성
JTable table = new JTable(data, title);
JScrollPane sp = new JScrollPane(table);
add(sp);
}
}
|
<결과>
- JOptionPane
- 실행하는 도중에 사용자로부터 데이터를 입력 받거나 특정한 메시지를 출력시켜 확인시키는 작업
- 자체적으로 실행시키는게 아니므로 showDialog()메소드를 통해 확인해야한다.
종류 | 기능 | 호출 함수 |
MessageDialog | 사용자에게 메시지를 보여준다. | showMessageDialog() |
ConfirmDialog | Yes, No, Cancel과 같은 버튼으로 확인 | showConfirmDialog() |
InputDialog | 사용자로부터 자료를 입력받기 위한 다이어로그 | showInputDialog() |
OptionDialog | 위 세 가지를 포함한 다이어로그 | showOptionDialog() |
<JOptionPane 예제 소스코드 - JOptionPaneTest.class>
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
47
48
49
50
51
52
53
54
55
56
57
|
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.JOptionPane;
public class JOptionPaneTest extends JFrame implements ActionListener
{
JButton btn[] = new JButton[4];
String[] str = {"로그인", "회원가입"};
public JOptionPaneTest()
{
super("JOptionpane 테스트");
setLayout(new FlowLayout());
btn[0]=new JButton("메세지");
btn[1]=new JButton("확인");
btn[2]=new JButton("입력");
btn[3]=new JButton("옵션");
for(JButton n : btn){
add(n);
n.addActionListener(this);
}
pack();
setLocation(300,300);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand()== "메세지")
{
JOptionPane.showMessageDialog(this,"메세지다이얼로그박스","메세지",JOptionPane.INFORMATION_MESSAGE);
}else if(e.getActionCommand()=="확인")
{
JOptionPane.showConfirmDialog(this,"확인다이얼로그박스","확인",JOptionPane.YES_NO_OPTION);
}else if(e.getActionCommand()=="입력")
{
JOptionPane.showInputDialog(this,"입력다이얼로그박스","입력",JOptionPane.YES_NO_OPTION);
}else if(e.getActionCommand()=="옵션")
{
JOptionPane.showOptionDialog(this,"옵션다이얼로그박스","옵션",JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE, null, str, str[1] );
}
}
public static void main(String[] args)
{
new JOptionPaneTest();
}
}
|
<결과>
3. JFileChooser
- 프로그램을 실행하는 도중에 데이터를 파일로부터 불러오거나 파일에 저장할 수 있도록 선택 다이어로그 생성
- 파일 선택창은 FileSystemView, FileView, FileFilter 등과 같은 컨트롤러와 함께
- FileSystemView는 파일 시스템과 디렉토리 정보를 제공
- FileView는 디렉토리 내부에 있는 파일들에 대한 정보를 제공
- FileFilter는 파일을 원하는 종류만 보여줄 수 있도록 걸러주는 역할
- 멤버필드
- static int CANCEL_OPTION : 취소를 선택했을 때 리턴되는 값
- static int APPROVE_OPTION : 예나 확인을 선택했을 때 리턴되는 값
- 생성자
- JFileChooser() : 디폴트 경로
- JFileChoorser(File currentDirectory) : 지정한 경로를 보여줌
- JFileChooser(String currentDirectoryPath) : 지정한 경로를 보여줌
<FileChooser예제 소스코드 - JFileChooserTest.class>
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
47
48
49
50
51
52
53
|
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileNameExtensionFilter;
public class JFileChooserTest extends JFrame implements ActionListener
{
// JFileChooser 선언
JFileChooser fc;
public JFileChooserTest()
{
// JFileChooser 생성
fc = new JFileChooser();
// 여러가지 선택 가능
fc.setMultiSelectionEnabled(true);
// JButton 생성
JButton btn = new JButton("파일선택");
btn.addActionListener(this);
add("North", btn);
setBounds(0, 0, 200, 200);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
// 버튼 클릭시 메소드
public void actionPerformed(ActionEvent e)
{
// 파일 이름 텍스트.txt가 디폴트값
FileNameExtensionFilter filter = new FileNameExtensionFilter("텍스트", "txt");
// 위 내용 적용
fc.setFileFilter(filter);
// 다이어로그 생성
int result = fc.showOpenDialog(this);
// 예 확인시
if(result == JFileChooser.APPROVE_OPTION)
{
// 파일 선택
File[] f = fc.getSelectedFiles();
int i = 0;
for(File n : f)
System.out.println(++i + "번째 선택한 파일:" + n.getName());
}
}
public static void main(String[] args)
{
new JFileChooserTest();
}
}
|
<결과>
4. JColorChooser
- 색상을 선택할 수 있는 다이어로그
- 생성자
- JColorChooser() : 초기 색이 흰색
- JColorChooser(Color initialColor) : 초기 색이 매개 변수
- JColorChooser(ColorSelectionModel model) : 지정된 선택 판 모델을 가지고 생성
- 메소드
- static JDialog createDialog(Component c , String title, boolean modal, JColorChooser chooserPane,
ActionListener okListener, ActionListener cancelListener)
- OK, Cancel 및 Reset 버튼과 함께 지정된 ColorChooser을 가지는 새로운 다이어로그 생성
- Color getColor() : 색상을 리턴
- void setColor(Color color): 색 설정
- void setColor(int c): 색 설정
- void setColor(int r, int g, int b): 색 설정
- static Color showDialog(Component component, String title, Color initialColor)
- 모델 다이얼로그로 화면에 표시
5. JMenu
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
public class JMenuTest extends JFrame
{
// JRadioButtonMenuItem 선언
private JRadioButtonMenuItem colorItems[], fonts[];
// JCheckBoxMenuItem 선언
private JCheckBoxMenuItem styleItems[];
// ButtonGroup 선언
private ButtonGroup fontGroup, colorGroup;
public JMenuTest()
{
super("JMenu 테스트");
// 메뉴바 생성
JMenuBar bar = new JMenuBar();
setJMenuBar(bar);
// 파일 메뉴
JMenu fileMenu = new JMenu("파일(F)");
fileMenu.setToolTipText("파일 메뉴입니다.");
fileMenu.setMnemonic('F');
// 파일 메뉴 안에 내용
JMenuItem newItem = new JMenuItem("새파일(N)");
newItem.setMnemonic('N');
fileMenu.add(newItem);
JMenuItem openItem = new JMenuItem("열기(O)");
openItem.setMnemonic('O');
fileMenu.add(openItem);
JMenuItem saveItem = new JMenuItem("저장(S)");
saveItem.setMnemonic('S');
fileMenu.add(saveItem);
JMenuItem exitItem = new JMenuItem("닫기(X)");
exitItem.setMnemonic('X');
fileMenu.add(exitItem);
bar.add(fileMenu);
// 편집 메뉴 생성
JMenu formatMenu = new JMenu("편집(E)");
formatMenu.setToolTipText("편집 메뉴입니다.");
formatMenu.setMnemonic('E');
// 편집 메뉴 안에 내용
String colors[] = {"검정", "파랑", "빨강", "초록"};
JMenu colorMenu = new JMenu("색상(C)");
colorMenu.setMnemonic('C');
colorItems = new JRadioButtonMenuItem[colors.length];
colorGroup = new ButtonGroup();
for(int i = 0 ; i < colors.length ; i++)
{
colorItems[i] = new JRadioButtonMenuItem(colors[i]);
colorMenu.add(colorItems[i]);
colorGroup.add(colorItems[i]);
}
colorItems[0].setSelected(true);
formatMenu.add(colorMenu);
formatMenu.addSeparator();
String fontNames[] = {"굴림", "바탕", "고딕"};
JMenu fontMenu = new JMenu("글꼴(T)");
fontMenu.setMnemonic('T');
fonts = new JRadioButtonMenuItem[fontNames.length];
fontGroup = new ButtonGroup();
for ( int i = 0; i < fonts.length; i++ )
{
fonts[ i ] = new JRadioButtonMenuItem( fontNames[ i ] );
fontMenu.add( fonts[ i ] );
fontGroup.add( fonts[ i ] );
}
fonts[0].setSelected(true);
fontMenu.addSeparator();
String styleNames[] = {"굵게", "기울임"};
styleItems = new JCheckBoxMenuItem[styleNames.length];
for ( int i = 0; i < styleNames.length; i++ )
{
styleItems[ i ] = new JCheckBoxMenuItem( styleNames[ i ] );
fontMenu.add( styleItems[ i ] );
}
formatMenu.add( fontMenu );
bar.add( formatMenu );
// 도움말 메뉴 생성
JMenu helpMenu = new JMenu( "도움말(H)" );
helpMenu.setToolTipText("도움말 메뉴입니다");
helpMenu.setMnemonic( 'H' );
JMenuItem helpItem = new JMenuItem( "도움말항목(L)" );
helpItem.setMnemonic( 'L' );
helpMenu.add(helpItem);
bar.add( helpMenu );
setSize( 400, 200 );
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main( String args[] )
{
new JMenuTest();
}
}
|
<결과>
여기까지 Java GUI의 대하여 알아보았습니다.
각 블로그 돌아 다니면서 다시 찾기 힘들어서, 개인 티스토리에 재 업로드....
기타 배열, for 문 등 문법은 나에게는 굳이 필요 없을 거 같아서 업로드 하지 않을 예정이다.
쓰레드나 네트워크 같은 경우에도 복잡하지만.... gui 객체 지향도 정복 못하는데;; 무슨.....
'소프트웨어 (과거) > 자바 GUI & C# 등...' 카테고리의 다른 글
8. 자바 gui 정리 - 다른 버전 (0) | 2022.01.29 |
---|---|
7. 자바 쓰레드 정리 (0) | 2022.01.29 |
5. 자바 GUI(Graphic User Interface) 정리 - 2 (0) | 2022.01.28 |
4. 자바 GUI(Graphic User Interface) 정리 - 1 (0) | 2022.01.28 |
3. 자바 리스너 이벤트 정리 (0) | 2022.01.28 |