명품 JAVA Essential 1
2 학습목표 1. 스윙컴포넌트종류이해 2. JLabel로문자열과이미지출력 3. JButton으로버튼만들기 4. JCheckBox로체크박스만들기 5. JRadioButton으로라디오버튼만들기 6. JTextField로한줄입력창만들기 7. JTextArea로여러줄의입력창만들기 8. JList로리스트만들기 9. JComboBox로콤보박스만들기 10. 메뉴만들기 11. 3개의유용한팝업다이얼로그활용
자바의 GUI 프로그래밍방법 3 자바의 GUI 프로그래밍방법 2 종류 컴포넌트기반 GUI 프로그래밍 스윙컴포넌트를이용하여쉽게 GUI를구축 자바에서제공하는컴포넌트의한계를벗어나지못함 그래픽기반 GUI 프로그래밍 그래픽을이용하여 GUI 구축 개발자가직접그래픽으로화면을구성하는부담 독특한 GUI를구성할수있는장점 GUI 처리의실행속도가빨라, 게임등에주로이용
컴포넌트기반 GUI 프로그래밍에사용되는스윙컴포넌트 4 * 스윙컴포넌트는이름이모두 J 자로시작한다.
스윙컴포넌트의공통메소드, JComponent 의메소드 5 JComponent 스윙컴포넌트는모두상속받는슈퍼클래스, 추상클래스스윙컴포넌트들이상속받는공통메소드와상수구현 JComponent의주요메소드사례
예제 10-1 : 스윙컴포넌트의공통기능, JComponent 의메소드 6 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JComponentEx extends JFrame { JComponentEx() { super("jcomponent 의공통메소드예제 "); Container c = getcontentpane(); c.setlayout(new FlowLayout()); JButton b1 = new JButton("Magenta/Yellow Button"); JButton b2 = new JButton(" Disabled Button "); JButton b3 = new JButton("getX(), gety()"); b1.setbackground(color.yellow); b1.setforeground(color.magenta); b1.setfont(new Font("Arial", Font.ITALIC, 20)); b2.setenabled(false); b3.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { JButton b = (JButton)e.getSource(); settitle(b.getx() + "," + b.gety()); ); c.add(b1); c.add(b2); c.add(b3); setsize(260,200); setvisible(true); public static void main(string[] args) { new JComponentEx(); 초기상태 getx(), gety() 버튼이클릭된상태 "Arial" 로 20 픽셀크기의폰트 비활성버튼 클릭하면타이틀바에버튼의좌표출력
JLabel 로문자열과이미지출력 7 JLabel 의용도 문자열이나이미지를화면에출력하기위한목적 레이블생성
레이블생성예 8 문자열레이블생성 JLabel textlabel = new JLabel(" 사랑합니다 "); 이미지레이블생성 이미지파일로부터이미지를읽기위해 ImageIcon 클래스사용다룰수있는이미지 : png, gif, jpg sunset.jpg 의경로명이 "images/sunset.jpg" 인경우 ImageIcon image = new ImageIcon("images/sunset.jpg"); JLabel imagelabel = new JLabel(image); 수평정렬값을가진레이블컴포넌트생성 수평정렬로, 문자열과이미지를모두가진레이블 ImageIcon image = new ImageIcon("images/sunset.jpg"); JLabel label = new JLabel(" 사랑합니다 ", image, SwingConstants.CENTER);
예제 10-2 : JLabel 을이용한레이블만들기 9 import javax.swing.*; import java.awt.*; 문자열레이블 public class LabelEx extends JFrame { LabelEx() { settitle(" 레이블예제 "); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(new FlowLayout()); JLabel textlabel = new JLabel(" 제임스고슬링입니더!"); ImageIcon img = new ImageIcon("images/gosling.jpg"); JLabel imagelabel = new JLabel(img); 이미지레이블 ImageIcon icon = new ImageIcon("images/icon.gif"); JLabel label = new JLabel(" 커피한잔하실래예, 전화주이소 ", icon, SwingConstants.CENTER); c.add(textlabel); c.add(imagelabel); c.add(label); setsize(300,500); setvisible(true); public static void main(string [] args) { new LabelEx(); 이미지와텍스트가함께있는레이블
JButton 으로버튼만들기 10 JButton 의용도 버튼모양의컴포넌트. 사용자로부터명령을입력받기위한목적버튼은클릭될때 Action 이벤트발생 버튼이미지 버튼문자열 버튼생성 "hello" 문자열을가진버튼생성예 JButton btn = new JButton("hello");
이미지버튼만들기 11 하나의버튼에 3 개의이미지등록 마우스조작에따라 3 개의이미지중적절한이미지자동출력 3 개의버튼이미지 normalicon 버튼의보통상태 ( 디폴트 ) 때출력되는이미지 생성자에이미지아이콘전달혹은 JButton의 seticon(normalicon); rollovericon 버튼에마우스가올라갈때출력되는이미지 이미지설정메소드 : JButton의 setrollovericon(rollovericon); pressedicon 버튼을누른상태때출력되는이미지 이미지설정메소드 : JButton의 setpressedicon(pressedicon)
이미지버튼에이미지설정 12 이미지로딩 필요한이미지로딩 : new ImageIcon( 이미지경로명 ); 사례 ) ImageIcon normalicon = new ImageIcon("images/normalIcon.gif"); ImageIcon rollovericon = new ImageIcon("images/rolloverIcon.gif"); ImageIcon pressedicon = new ImageIcon("images/pressedIcon.gif"); 버튼에이미지등록 JButton 의메소드를호출하여이미지등록 사례 ) JButton button = new JButton(" 테스트버튼 ", normalicon); // normalicon 달기 button.setrollovericon(rollovericon); // rollovericon 달기 button.setpressedicon(pressedicon); // pressedicon 달기 실행중에 normal 이미지 ( 디폴트이미지 ) 교체사례 ImageIcon newicon = new ImageIcon("images/newIcon.gif"); button.seticon(newicon); // 디폴트이미지변경
예제 10-3 : JButton 을이용한이미지버튼만들기 13 그림과같이작동하는이미지버튼을작성하라. import javax.swing.*; import java.awt.*; 보통상태에있는동안 (normalicon.gif) public class ButtonImageEx extends JFrame { ButtonImageEx() { settitle(" 이미지버튼예제 "); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(new FlowLayout()); ImageIcon normalicon = new ImageIcon("images/normalIcon.gif"); ImageIcon rollovericon = new ImageIcon("images/rolloverIcon.gif"); ImageIcon pressedicon = new ImageIcon("images/pressedIcon.gif"); 마우스가버튼위에올라간경우 (rollovericon.gif) 마우스가눌러진순간 (pressedicon.gif) JButton btn = new JButton("call~~", normalicon); btn.setpressedicon(pressedicon); // pressedicon 용이미지등록 btn.setrollovericon(rollovericon); // rollovericon 용이미지등록 c.add(btn); setsize(250,150); setvisible(true); public static void main(string [] args) { new ButtonImageEx();
JCheckBox 로체크박스만들기 14 JCheckBox 의용도 선택 (selected) 과비선택 (deselected) 두상태만가지는버튼 체크박스생성 체크박스문자열 체크박스이미지 문자열을가진체크박스생성예 JCheckBox apple = new JCheckBox(" 사과 "); // " 사과 " 체크박스생성 JCheckBox pear = new JCheckBox(" 배 ", true); // 선택상태의 " 배 " 체크박스생성
예제 10-4 : JCheckBox 로체크박스만들기 15 그림과같은 3 개의문자열체크박스를가진프로그램을작성하라. import javax.swing.*; import java.awt.*; 초기상태 public class CheckBoxEx extends JFrame { CheckBoxEx() { settitle(" 체크박스만들기예제 "); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(new FlowLayout()); // 3 개의체크박스를생성한다. JCheckBox apple = new JCheckBox(" 사과 "); JCheckBox pear = new JCheckBox(" 배 ", true); JCheckBox cherry = new JCheckBox(" 체리 "); c.add(apple); c.add(pear); c.add(cherry); 선택상태의체크박스생성 체리체크박스를선택한상태 setsize(250,150); setvisible(true); public static void main(string [] args) { new CheckBoxEx();
체크박스에 Item 이벤트처리 16 Item 이벤트 체크박스의선택상태에변화가생길때발생하는이벤트 사용자가마우스나키보드로체크박스를선택 / 해제할때 프로그램에서체크박스를선택 / 해제하여체크상태에변화가생길때 JCheckBox c = new JCheckBox(" 사과 "); c.setselected(true); // 선택상태로변경 이벤트가발생하면 ItemEvent 객체생성 ItemListener 리스너를이용하여이벤트처리 ItemListener 리스너의추상메소드 ItemEvent 의주요메소드
예제 10-5 : ItemEvent 를활용하여체크박스로가격합산응용 17 그림과같이사과, 배, 체리체크박스를만들고, 사용자가과일을선택하면선택된과일의가격을합산하여출력하는프로그램을작성하라. 3 개의체크박스 계산합을출력하는레이블
예제 10-5 정답 18 import javax.swing.*; import java.awt.event.*; import java.awt.*; public class CheckBoxItemEventEx extends JFrame { JCheckBox [] fruits = new JCheckBox [3]; String [] names = {" 사과 ", " 배 ", " 체리 "; JLabel sumlabel; CheckBoxItemEventEx() { settitle(" 체크박스와 ItemEvent 예제 "); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(new FlowLayout()); c.add(new JLabel(" 사과 100 원, 배 500 원, 체리 20000 원 ")); MyItemListener listener = new MyItemListener(); for(int i=0; i<fruits.length; i++) { fruits[i] = new JCheckBox(names[i]); fruits[i].setborderpainted(true); c.add(fruits[i]); fruits[i].additemlistener(listener); sumlabel = new JLabel(" 현재 0 원입니다."); c.add(sumlabel); setsize(250,200); setvisible(true); // Item 리스너구현 class MyItemListener implements ItemListener { int sum = 0; // 가격의합 public void itemstatechanged(itemevent e) { if(e.getstatechange() == ItemEvent.SELECTED) { if(e.getitem() == fruits[0]) sum += 100; else if(e.getitem() == fruits[1]) sum += 500; else sum += 20000; else { if(e.getitem() == fruits[0]) sum -= 100; else if(e.getitem() == fruits[1]) sum -= 500; else sum -= 20000; sumlabel.settext(" 현재 " + sum + " 원입니다."); public static void main(string [] args) { new CheckBoxItemEventEx();
JRadioButton 으로라디오버튼만들기 19 JRadioButton 의용도 버튼그룹을형성하고, 그룹에속한버튼중하나만선택되는라디오버튼체크박스와의차이점 체크박스는각각선택 / 해제가가능하지만, 라디오버튼은그룹에속한버튼중하나만선택 라디오버튼생성 버튼그룹에속한라디오버튼들
라디오버튼생성및 Item 이벤트처리 20 버튼그룹과라디오버튼생성과정 1. 버튼그룹객체생성 2. 라디오버튼생성 3. 라디오버튼을버튼그룹에삽입 4. 라디오버튼을컨테이너에삽입 ButtonGroup group = new ButtonGroup(); JRadioButton apple= new JRadioButton(" 사과 "); JRadioButton pear= new JRadioButton(" 배 "); JRadioButton cherry= new JRadioButton(" 체리 "); group.add(apple); group.add(pear); group.add(cherry); container.add(apple); container.add(pear); container.add(cherry); 라디오버튼에 Item 이벤트처리 : ItemListener 리스너이용 라디오버튼이선택 / 해제되어상태가달라지면, Item 이벤트발생 사용자가마우스나키보드로선택상태를변경할때 프로그램에서 JRadioButton의 setselected() 를호출하여선택상태를변경할때
예제 10-6 : JRadioButton 으로라디오버튼만들기 21 그림과같이 3 개의라디오버튼을가진프로그램을작성하라. 버튼그룹 g 에속한라디오버튼들 import javax.swing.*; import java.awt.*; public class RadioButtonEx extends JFrame { RadioButtonEx() { settitle(" 라디오버튼만들기예제 "); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(new FlowLayout()); ButtonGroup g = new ButtonGroup(); // 버튼그룹객체생성 JRadioButton apple = new JRadioButton(" 사과 "); JRadioButton pear = new JRadioButton(" 배 ", true); JRadioButton cherry = new JRadioButton(" 체리 "); // 버튼그룹에 3 개의라디오버튼삽입 g.add(apple); g.add(pear); g.add(cherry); // 컨텐트팬에 3개의라디오버튼삽입 c.add(apple); c.add(pear); c.add(cherry); setsize(250,150); setvisible(true); public static void main(string [] args) { new RadioButtonEx();
JTextField 로한줄입력창만들기 22 JTextField 한줄의문자열을입력받는창 ( 텍스트필드 ) 텍스트입력도중 <Enter> 키가입력되면 Action 이벤트발생 입력가능한문자개수와입력창의크기는서로다름 텍스트필드생성 컴퓨터공학과 로초깃값을가지는텍스트필드생성예 JTextField tf2 = new JTextField(" 컴퓨터공학과 ");
예제 10-7 : JTextField 로텍스트필드만들기 23 JTextField 를이용하여그림과같이이름, 학과, 주소를입력받는폼을만들어라. 입력창의열의개수는모두 20 으로한다. import javax.swing.*; import java.awt.*; 초기화면 public class TextFieldEx extends JFrame { TextFieldEx() { settitle(" 텍스트필드만들기예제 "); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(new FlowLayout()); c.add(new JLabel(" 이름 ")); c.add(new JTextField(20)); c.add(new JLabel(" 학과 ")); c.add(new JTextField(" 컴퓨터공학과 ", 20)); c.add(new JLabel(" 주소 ")); c.add(new JTextField(" 서울시...", 20)); 사용자가입력한경우 setsize(300,150); setvisible(true); public static void main(string [] args) { new TextFieldEx();
TextArea 로여러줄의입력창만들기 24 JTextArea 여러줄의문자열을입력받을수있는창 ( 텍스트영역 ) 스크롤바를지원하지않는다. JScrollPane 객체에삽입하여스크롤바지원받음 생성자
텍스트영역생성예 25 "hello" 문자열의초깃값을가지고한줄에 20 개의문자가입력가능하며, 7 줄로구성된텍스트영역만들기 왼쪽에만든텍스트영역에스크롤바붙이기 7 줄 사용자가텍스트영역에텍스트를입력하면, 스크롤바나타남 20 문자 JTextArea ta = new JTextArea("hello", 7, 20); container.add(ta); JTextArea ta = new JTextArea("hello", 7, 20); container.add(new JScrollPane(ta));
예제 10-8 : JTextArea 로여러줄이입력되는창만들기 26 그림과같이텍스트필드에문자열을입력한후 <Enter> 키를입력하면텍스트영역창에문자열을추가하고텍스트필드입력창은지우는프로그램을작성하라. <Enter> 키를입력하면 Action 이벤트발생 import javax.swing.*; import java.awt.event.*; import java.awt.*; public class TextAreaEx extends JFrame { JTextField tf = new JTextField(20); JTextArea ta = new JTextArea(7, 20); TextAreaEx() { settitle(" 텍스트영역만들기예제 "); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(new FlowLayout()); c.add(new JLabel(" 입력후 <Enter> 키를입력하세요 ")); c.add(tf); c.add(new JScrollPane(ta)); 초기화면 텍스트필드에입력하고 <Enter> 키를누른경우 tf.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { JTextField t = (JTextField)e.getSource(); ta.append(t.gettext() + "\n"); t.settext(""); ); setsize(300,300); setvisible(true); public static void main(string [] args) { new TextAreaEx();
JList 로리스트만들기 27 JList 하나이상의아이템을보여주고아이템을선택하도록하는리스트 JScrollPane에 JList 컴포넌트를삽입하여야스크롤가능 리스트생성 예 ) 9 개의과일이름문자열이든리스트만들기 String [] fruits= {"apple", "banana", "kiwi", "mango", "pear", "peach", "berry", "strawberry", "blackberry"; JList strlist = new JList(fruits);
28 예제 10-9 : JList 로다양한리스트만들기 그림과같은 3 개의리스트를가진프로그램을작성하라. import javax.swing.*; import java.awt.*; public class ListEx extends JFrame { String [] fruits= {"apple", "banana", "kiwi", "mango", "pear", "peach", "berry", "strawberry", "blackberry"; ImageIcon [] images = { new ImageIcon("images/icon1.png"), new ImageIcon("images/icon2.png"), new ImageIcon("images/icon3.png"), new ImageIcon("images/icon4.png") ; ListEx() { settitle(" 리스트만들기예제 "); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(new FlowLayout()); JList strlist = new JList(fruits); c.add(strlist); JList imagelist = new JList(); imagelist.setlistdata(images); c.add(imagelist); 문자열리스트 스크롤바를가지는리스트 JList scrolllist = new JList(fruits); c.add(new JScrollPane(scrollList)); 이미지리스트 setsize(300,300); setvisible(true); public static void main(string [] args) { new ListEx();
JComboBox 로콤보박스만들기 29 JComboBox 텍스트필드와버튼, 그리고드롭다운리스트로구성되는콤보박스드롭다운리스트에서선택한것이텍스트필드에나타남 콤보박스생성 예 ) 텍스트를아이템으로가진콤보박스생성 텍스트필드 버튼 String [] fruits = {"apple", "banana", "kiwi", "mango", "pear", "peach", "berry", "strawberry", "blackberry" ; JComboBox combo = new JComboBox(fruits); 드롭다운리스트
예제 10-10 : JComboBox 로콤보박스만들고활용하기 30 그림과같이 "apple", "babana", "mango" 의과일이름을가진콤보박스를만들고사용자가선택한과일의이미지를콤보박스옆에출력하는프로그램을작성하라. import javax.swing.*; import java.awt.event.*; import java.awt.*; public class ComboActionEx extends JFrame { String [] fruits = {"apple", "banana", "mango"; ImageIcon [] images = { new ImageIcon("images/apple.jpg"), new ImageIcon("images/banana.jpg"), new ImageIcon("images/mango.jpg") ; JLabel imglabel = new JLabel(images[0]); JComboBox JLabel ComboActionEx() { settitle(" 콤보박스활용예제 "); Container c = getcontentpane(); c.setlayout(new FlowLayout()); JComboBox combo = new JComboBox(fruits); c.add(combo); c.add(imglabel); // 콤보박스에 Action 리스너등록. 선택된아이템의이미지출력 combo.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { JComboBox cb = (JComboBox)e.getSource(); int index = cb.getselectedindex(); imglabel.seticon(images[index]); ); setsize(300,250); setvisible(true); public static void main(string [] args) { new ComboActionEx();
메뉴구성 31 메뉴만들기에필요한스윙컴포넌트 메뉴아이템 JMenuItem 메뉴 JMenu 여러개의메뉴아이템을가짐메뉴바 JMenuBar 여러개의메뉴를붙이는바이며, 프레임에부착됨분리선 메뉴아이템사이의분리선으로 separator라고부름 JMenu의 addseparator() 를호출하여삽입함 메뉴 (JMenu) 메뉴아이템 (JMenuItem) 메누바 (JMenuBar) 분리선
메뉴만드는과정 32 JMenuBar 컴포넌트 JMenuBar 컴포넌트 JMenuBar 컴포넌트 JMenuBar 컴포넌트 add add JMenuItem 컴포넌트 JMenu 컴포넌트 JMenu 컴포넌트 JMenu 컴포넌트 JMenu 컴포넌트 (1) JMenuBar 컴포넌트생성 (2) JMenu 컴포넌트를생성하여 JMenuBar 에붙인다. (3) JMenuItem 컴포넌트를생성하여 JMenu 에붙인다. (3 ) 여러개의메뉴와메뉴아이템을생성한다. 타이틀바 (4) JMenuBar 컴포넌트를 JFrame 에붙인다. (1) (2) (3) (4) JMenuBar mb = new JMenuBar(); JMenu screenmenu = new JMenu("Screen"); mb.add(screenmenu); screenmenu.add(new JMenuItem("Load")); screenmenu.add(new JMenuItem("Hide")); screenmenu.add(new JMenuItem("ReShow")); screenmenu.addseparator(); screenmenu.add(new JMenuItem("Exit")); frame.setjmenubar(mb);
예제 10-11 : 메뉴만들기 그림과같이 Screen, Edit, Source, Project, Run 의 5 개메뉴를가지며, Screen 메뉴에만 4 개의메뉴아이템과분리선 (separator) 을가지도록프로그램을작성하라. import javax.swing.*; public class MenuEx extends JFrame { MenuEx() { settitle("menu 만들기예제 "); createmenu(); // 메뉴생성, 프레임에삽입 setsize(250,200); setvisible(true); void createmenu() { JMenuBar mb = new JMenuBar(); JMenu screenmenu = new JMenu("Screen"); screenmenu.add(new JMenuItem("Load")); screenmenu.add(new JMenuItem("Hide")); screenmenu.add(new JMenuItem("ReShow")); screenmenu.addseparator(); screenmenu.add(new JMenuItem("Exit")); mb.add(screenmenu); mb.add(new JMenu("Edit")); mb.add(new JMenu("Source")); mb.add(new JMenu("Project")); mb.add(new JMenu("Run")); setjmenubar(mb); public static void main(string [] args) { new MenuEx(); 메뉴바를프레임에붙임. 비로소메뉴가보인다. 33
메뉴아이템에 Action 이벤트달기 34 메뉴아이템을클릭하면 Action 발생 메뉴아이템은사용자로부터의지시나명령을받는데사용 ActionListener 인터페이스로리스너작성각메뉴아이템마다이벤트리스너설정 예 ) Load 메뉴아이템에 Action 리스너를작성하는경우 JMenuItem item = new JMenuItem("Load"); item.addactionlistener(new MenuActionListener()); // 메뉴아이템에 Action 리스너설정 screenmenu.add(item); class MenuActionListener implements ActionListener { public void actionperformed(actionevent e) { // 사용자가 Load 메뉴아이템을선택하는경우처리할작업구현...
예제 10-12 : 메뉴에 Action 리스너활용 35 그림과같이 Screen 메뉴에 4 개의메뉴아이템을만들고, Load 메뉴아이템을선택하면이미지를하나로딩하여출력하고, Hide 메뉴아이템을선택하면이미지를보이지않게하며, ReShow 메뉴아이템을선택하면숨겨진이미지를다시보이게하고, Exit 메뉴아이템을선택하면프로그램을종료하도록 Action 리스너를작성하라. 초기상태 Load 메뉴아이템선택하면레이블에이미지출력 Hide 메뉴아이템선택으로이미지를보이지않게함 ReShow 메뉴아이템선택으로숨겨진이미지가다시보이게함 Exit 메뉴아이템선택하면프로그램종료
예제 10-12 정답 36 import javax.swing.*; import java.awt.event.*; import java.awt.*; public class MenuActionEventEx extends JFrame { JLabel imglabel = new JLabel(); // 빈레이블 MenuActionEventEx() { settitle("menu 에 Action 리스너만들기예제 "); createmenu(); getcontentpane().add(imglabel, BorderLayout.CENTER); setsize(250,200); setvisible(true); void createmenu() { JMenuBar mb = new JMenuBar(); // 메뉴바생성 JMenuItem [] menuitem = new JMenuItem [4]; String[] itemtitle = {"Load", "Hide", "ReShow", "Exit"; JMenu screenmenu = new JMenu("Screen"); class MenuActionListener implements ActionListener { public void actionperformed(actionevent e) { String cmd = e.getactioncommand(); switch(cmd) { // 메뉴아이템의종류구분 case "Load" : if(imglabel.geticon()!= null) return; // 이미로딩되었으면리턴 imglabel.seticon(new ImageIcon("images/img.jpg")); break; case "Hide" : imglabel.setvisible(false); break; case "ReShow" : imglabel.setvisible(true); break; case "Exit" : System.exit(0); break; MenuActionListener listener = new MenuActionListener(); for(int i=0; i<menuitem.length; i++) { menuitem[i] = new JMenuItem(itemTitle[i]); menuitem[i].addactionlistener(listener); screenmenu.add(menuitem[i]); mb.add(screenmenu); setjmenubar(mb); // 메뉴바를프레임에부착 public static void main(string [] args) { new MenuActionEventEx();
팝업다이얼로그, JOptionPane 37 팝업다이얼로그 사용자에게메시지를전달하거나문자열을간단히입력받는용도 JOptionPane 클래스를이용하여생성 static 타입의간단한메소드이용 입력다이얼로그 - JOptionPane.showInputDialog() 한줄을입력받는다이얼로그 String name = JOptionPane.showInputDialog(" 이름을입력하세요."); // name 에 "Java Kim" 이리턴 // 취소버튼이나, 입력없이다이얼로그가닫히면 null 리턴
확인다이얼로그 38 확인다이얼로그 - JOptionPane.showConfirmDialog() 사용자로부터 Yes/No 응답을입력받는다이얼로그 int result = JOptionPane.showConfirmDialog(null, " 계속할것입니까?", "Confirm", JOptionPane.YES_NO_OPTION); if(result == JOptionPane.CLOSED_OPTION) { // 사용자가 " 예 ", " 아니오 " 의선택없이다이얼로그창을닫은경우 else if(result == JOptionPane.YES_OPTION) { // 사용자가 " 예 " 를선택한경우 else { // 사용자가 " 아니오 " 를선택한경우
메시지다이얼로그 39 메시지다이얼로그 showmessagedialog 단순메시지를출력하는다이얼로그 JOptionPane.showMessageDialog(null, " 조심하세요 ", "Message", JOptionPane.ERROR_MESSAGE);
예제 10-13 : JOptionPane 으로 3 가지팝업다이얼로그만들기 초기화면 다음그림과같이 3 개의팝업다이얼로그를출력하는응용프로그램을작성해보라 Input Name 버튼을누르면입력다이얼로그생성. "Java Kim" 을입력하고확인버튼을누르면텍스트필드창에출력 Confirm 버튼을누르면확인다이얼로그생성 " 예 " 버튼을누르면텍스트필드창에 "Yes" 출력 40 Message 버튼을누르면메시지다이얼로그생성 " 확인 " 버튼을누르면다이얼로그종료
예제 10-13 정답 inputbtn.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { import javax.swing.*; import java.awt.event.*; import java.awt.*; public class OptionPaneEx extends JFrame { Container contentpane; OptionPaneEx() { settitle(" 옵션팬예제 "); setdefaultcloseoperation(jframe.exit_on_close); contentpane = getcontentpane(); setsize(500,200); contentpane.add(new MyPanel(), BorderLayout.NORTH); setvisible(true); class MyPanel extends Panel { JButton inputbtn = new JButton("Input Name"); JTextField tf = new JTextField(10); JButton confirmbtn = new JButton("Confirm"); JButton messagebtn = new JButton("Message"); MyPanel() { setbackground(color.light_gray); add(inputbtn); add(confirmbtn); add(messagebtn); add(tf); ); String name = JOptionPane.showInputDialog(" 이름을입력하세요."); if(name!= null) tf.settext(name); confirmbtn.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { int result = JOptionPane.showConfirmDialog(null, " 계속할것입니까?", "Confirm", JOptionPane.YES_NO_OPTION); if(result == JOptionPane.CLOSED_OPTION) tf.settext("just Closed without Selection"); else if(result == JOptionPane.YES_OPTION) tf.settext("yes"); else tf.settext("no"); ); messagebtn.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { JOptionPane.showMessageDialog(null, " 조심하세요 ", "Message", JOptionPane.ERROR_MESSAGE); ); 41 public static void main(string [] args) { new OptionPaneEx();