Chap 15. Swing
description
Transcript of Chap 15. Swing
Chap 15. SwingChap 15. Swing
15. Swing15. Swing
- AWT를 한단계 발전시킨 자바 그래픽 사용자 인터페이스 패키지 - Java 1.2에는 표준 패키지로 포함 - AWT에 비해 훨씬 화려한 GUI 프로그래밍 가능 - Swing은 JFC의 일부 - JFC는 Java Foundation Classes의 약자 .
- JFC의 특징
15. Swing15. Swing
15. Swing15. Swing
15.1 Swing 응용 프로그램의 구조
15. Swing15. Swing
15.1 Swing 응용 프로그램의 구조① Heavyweight 컨테이너
Swing 응용 프로그램의 최상위 레벨은 중량 (heavyweight) 컨테이너를
포함하고 있으며 , 응용 프로그램의 메인 윈도우는 반드시 중량 컨테이
너에 부착되어야 한다 . JFrame, JApplet 등이 중량 컨테이너에 속한다 .
② JRootPane
중량 컨테이너는 루트 페인 (root pane) 이라 불리는 객체를 가지고 있으
며 , 루트 페인은 툴팁 (tool tip) 이나 드래그 & 드롭과 같은 중요 기능을
지원한다 .
③ JLayeredPane
계층 페인 (layered pane) 은 메뉴바와 컨텐츠 페인 (content pane) 을 관리
하며 , 컴포넌트간의 오버래핑을 가능하게 해준다 .
15. Swing15. Swing15.1 Swing 응용 프로그램의 구조④ JMenuBar 메뉴바는 JMenuBar 클래스에 의해서 구현되며 , 일반적인 메뉴바 기능을 지원한다 . ⑤ contentPane 컨텐츠 페인 (contentPane) 은 중량 컨테이너에 부착되는 모든 컴포넌 트의 접속창 역할을 한다 . AWT와는 달리 Swing 에서는 먼저 중량 컨테이너의 layout 관리자를 설정하거나 중량 컨테이너에 컴포넌트 를 부착하기 위해서는 먼저 컨텐츠 페인을 구하여야 한다 . 컨텐츠 페인을 구한 후 , layout 관리자를 설정하는 예는 다음과 같다 . Component cp = getContentPane(); cp.setLayout(new BorderLayout());
15. Swing15. Swing
15.1 Swing 응용 프로그램의 구조
또한 컨텐츠 페인을 구한 후 , 버튼과 같은 컴포넌트를 중량
컨테이너에 부착하는 예는 다음과 같다 .
Container cp = getContentPane();
cp.add(new Button("push"));
또는 간단하게 다음과 같이 한줄로 쓸 수 있다 .
getContentPane().add(new Button("push"));
15. Swing15. Swing15.2 Swing 프로그램 작성 순서 ① Swing 프로그램 작성에 필요한 라이브러리를 import 한다 . import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; ② 적절한 중량 컨테이너를 설정한다 . 응용 프로그램의 메인 윈도우는 중량 컨테이너에만 포함될 수 있다 . JFrame, JDialog, JApplet, JWindow 등이 중량 컨테이너에 속한다 .
③ 필요에 따라 경량 컨테이너 (lightweight Container) 를 설정한다 . JPanel, JScrollPane, JSplitPane, JTabbedPane, JToolbar 등이 경량 컨테이너에 속한다 .
④ 컨테이너의 레이아웃을 설정한다 . 필요한 컴포넌트를 설정하고 컨테이너에 부착시킨다 . 중량 컨테이너에 컴포넌트를 부착하거나 레이아웃을 설정할 때에는 먼저 ContentPane 을 구하여야 한다 . 경량 컨테이너에서는 ContentPane 을 구할 필요가 없다 .
15. Swing15. Swing
15.2 Swing 프로그램 작성 순서
④ 컨테이너의 레이아웃을 설정한다 . 필요한 컴포넌트를 설정하고 컨테이너에 부착시킨다 . 중량 컨테이너에 컴포넌트를 부착하거나 레이아웃을 설정할 때에는 먼저 ContentPane 을 구하여야 한다 . 경량 컨테이너에서는 ContentPane 을 구할 필요가 없다 .
⑤ 이벤트 처리가 필요한 컴포넌트의 이벤트 처리 루틴을 작성한 후 , 컴포넌트를 등록한다 .
⑥ 컨테이너의 위치와 크기를 설정하고 , setVisible(Ture) 또는 show() 메소드를 사용하여 컨테이너가 보여지도록 한다 .
15. Swing15. Swing
15.3 Swing 의 주요 컴포넌트 15.3.1 JFrame
- JFrame 은 Swing 의 최상위 윈도우이다 .
- JFrame 은 중량 컨테이너 (Heavyweight Container) 로서 응용 프로그램은
반드시 하나 이상의 중량 컨테이너를 가져야 한다 .
- JFrame 객체에 버튼이나 레이블과 같은 컴포넌트를 부착할 수 있다 .
- JFrame 클래스는 다음과 같은 생성자와 메소드를 지원한다 .
o 생성자
① JFrame()
② JFrame(String title)
- 타이틀을 title 로 설정한 JFrame객체를 생성한다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.1 JFrame o 메소드 ① void setTitle(String title) - 프레임의 타이틀을 설정한다 . ② void setSize(int width, int height) - 프레임의 크기를 설정한다 . 프레임의 기본 크기는 (0,0) 이다 . ③ void setLocation(int x, int y) - 프레임의 위치를 설정한다 . 프레임의 기본 위치는 좌상단이다 . ④ void show() 또는 setVisible(true) - 프레임을 보이게 한다 . 생성된 프레임은 자동으로 보이지 않는다 . ⑤ void setLayout(LayoutManager m) - 프레임의 layout 을 설정한다 . ⑥ void addWindowListenenr(WindowAdapter wa) - 윈도우 이벤트를 처리하기위해 WindowAdapter 객체에 등록한다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] import java.awt.event.*; import javax.swing.*; class JFrameDemo extends JFrame { JFrameDemo() { setTitle("JFrame Demo!"); setSize(400, 180); // 프레임의 크기 setLocation(200, 80); // 프레임의 위치 설정 } public static void main( String args[] ) { JFrameDemo fm = new JFrameDemo(); fm.show(); fm.addWindowListener( // 종료 버튼 클릭 처리 new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.2 JLabel o 생성자 ① JLabel(String text) - 주어진 텍스트를 보여주는 레이블을 생성한다 . ② JLabel(Icon image) - 주어진 아이콘을 보여주는 레이블을 생성한다 . ③ JLabel(String text, int horizontalAlignment) ④ JLabel(Icon image, int horizontalAlignment) ⑤ JLabel(String text, Icon image, int horizontalAlignment) - 주어진 텍스트와 아이콘을 보여주는 레이블을 생성한다 . - 수평 정렬은 JLabel.LEFT, JLabel.RIGHT, JLabel.CENTER 등을 사용할 수 있다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.2 JLabel o 지원되는 메소드 ① void setHorizontalAlignment(int alignment) - 수평 정렬을 설정한다 . ② void setVerticalAlignment(int alignment) - 수직 정렬을 설정한다 . - 인자는 JLabel.TOP, JLabel.BOTTOM, JLable.CENTER 등을 사용할 수 있다 . ③ void setHorizontalTextPosition(int textPosition) - 아이콘에 대한 텍스트의 수평 상대위치를 설정한다 . - 인자로 JLabel.LEFT, JLabel.RIGHT, JLabel.CENTER 등을 사용할 수 있다 . ④ void setVerticalTextPosition(int textPosition) - 아이콘에 대한 텍스트의 수직 상대위치를 설정한다 . - 인자로 JLabel.TOP, JLabel.BOTTOM, JLable.CENTER 등을 사용할 수 있다 . ⑤ void setIconTextGap(int gap) - 아이콘과 텍스트의 간격을 pixel 수로 나타낸다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*; class JLabel1 extends JFrame{ JLabel1() { super("JLabel Demo"); JLabel l1, l2, l3, l4; getContentPane().setLayout(new GridLayout(2, 2)); // 그래픽 파일로 이미지 아이콘 생성 ImageIcon icon = new ImageIcon("./image/tools.gif"); l1 = new JLabel("Left-No image", JLabel.LEFT); l2 = new JLabel("Normal", icon, JLabel.CENTER); l3 = new JLabel("Bottom", icon, JLabel.CENTER); l3.setVerticalTextPosition(JLabel.BOTTOM); l3.setHorizontalTextPosition(JLabel.CENTER); l4 = new JLabel("Top", icon, JLabel.RIGHT); l4.setVerticalTextPosition(JLabel.TOP); l4.setHorizontalTextPosition(JLabel.CENTER);
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] Container cp = getContentPane(); cp.add(l1); // 레이블 부착 cp.add(l2); cp.add(l3); cp.add(l4); } public static void main(String[] args){ JLabel1 f = new JLabel1(); f.setSize(400, 250); // frame 크기 설정 f.setVisible(true); // frame 을 보이게 함 // 윈도우 종료시 실행 종료 f.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); }}
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.3 Border Border 는 Swing 컴포넌트의 경계선의 모양을 설정해주는 클래스이다 . Border
를 사용하면 컴포넌트의 경계선에 다양한 모양을 설정할 수 있다 . Border를
사용하기 위해서는 프로그램 시작부분에서 javax.swing.border 패키지를 별도로 선언하여야 한다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; // 보더 패키지 수입 public class BorderSwing extends JFrame { JLabel noborder, raised, etched, title1; JLabel title2, lowered, line, matte; public BorderSwing() { super("Swing Borders"); getContentPane().setLayout(new GridLayout(0, 2, 10, 10)); noborder = new JLabel("No Border",JLabel.CENTER); raised = new JLabel("Raised Border",JLabel.CENTER); raised.setBorder(new BevelBorder(BevelBorder.RAISED)); lowered = new JLabel("Lowered Border",JLabel.CENTER); lowered.setBorder(new SoftBevelBorder(SoftBevelBorder.LOWERED)); line = new JLabel("Line Border",JLabel.CENTER); line.setBorder(new LineBorder(Color.red));
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] etched = new JLabel("Etched Border",JLabel.CENTER); etched.setBorder(new EtchedBorder()); title1 = new JLabel("Title Border",JLabel.CENTER); title1.setBorder(new TitledBorder("Hello")); title2 = new JLabel("Title Border 2",JLabel.CENTER); title2.setBorder(new TitledBorder(new TitledBorder("Hello!"), "World", TitledBorder.RIGHT, TitledBorder.BOTTOM)); matte = new JLabel("Matte Border",JLabel.CENTER); matte.setBorder(new MatteBorder(4, 12, 17, 25, Color.green)); Container cp = getContentPane(); cp.add(noborder); cp.add(line); cp.add(raised); cp.add(lowered); cp.add(etched); cp.add(title1); cp.add(title2); cp.add(matte); }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] public static void main(String args[]) { BorderSwing fm = new BorderSwing(); fm.setSize(450, 350); fm.setVisible(true); fm.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.4 Tooltip 버튼의 툴팁 설정예 JButton b = new JButton("button with tooltip"); b.setToolTipText("This is a Button");
[ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*; class ToolTipTest extends JFrame{ ToolTipTest() { super("ToolTip Demo"); JLabel l1, l2; getContentPane().setLayout(new GridLayout(0, 2)); // 그래픽 파일로 이미지 아이콘 생성 ImageIcon icon = new ImageIcon("./image/tools.gif");
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 l1 = new JLabel("NO TOOL TIP",icon, JLabel.CENTER); l1.setVerticalTextPosition(JLabel.CENTER); l1.setHorizontalTextPosition(JLabel.LEFT); l2 = new JLabel("With tool tip", icon, JLabel.CENTER); l2.setVerticalTextPosition(JLabel.TOP); l2.setHorizontalTextPosition(JLabel.CENTER); l2.setToolTipText("This is ToolTip"); Container cp = getContentPane(); cp.add(l1); // 레이블 부착 cp.add(l2); } public static void main(String[] args){ ToolTipTest f = new ToolTipTest(); f.setSize(360, 120); // frame 크기 설정 f.setVisible(true); // frame 을 보이게 함 // 윈도우 종료시 실행 종료 f.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); }}
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.5 JButton o 생성자 ① JButton() ② JButton(Icon icon) ③ JButton(String text) ④ JButton(String text, Icon icon)
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 o 지원되는 메소드 ① String getText() void setText(String text) - 버튼의 텍스트를 설정하거나 반환할 때 사용한다 . ② Icon getIcon() void setIcon(Icon icon) - 버튼의 아이콘을 설정하거나 반환할 때 사용한다 . ③ int getHorizontalAlignment() void setHorizontalAlignment(int arg) - 버튼의 수평위치를 설정하거나 반환할 때 사용하며 , - 사용되는 인자 arg 는 LFFT, CENTER, RIGHT 이 허용된다 . ④ int getVerticalAlignment() void setVerticalAlignment(int arg) - 버튼의 수직위치를 설정하거나 반환할 때 사용하며 , - 사용되는 인자 arg 는 TOP, CENTER, BOTTOM이 허용된다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 o 지원되는 메소드 ⑤ int getHorizontalTextPosition() void setHorizontalTextPosition(int position) int setVerticalTextPosition() void setVerticalTextPosition() - 아이콘위치에 따른 텍스트의 상대적 위치를 설정하는 데 사용 - 텍스트의 수평 위치는 LEFT, CENTER, RIGHT 를 사용 - 텍스트의 수직위치는 TOP, CENTER, BOTTOM를 사용 ⑥ void setMnemonic(char c) - 마우스 클릭을 대신하는 단축키를 설정 ⑦ void setDisabledIcon(Icon icon) - 버튼이 비활성화되었을 때 , 아이콘을 변경시키고자 할 때 ⑧ void setPressedIcon(Icon icon) void setRolloverIcon(Icon icon)
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*; class ButtonTest extends JFrame { JButton b1, b2; public ButtonTest() { super( "JButton Test" ); Container c = getContentPane(); c.setLayout(new GridLayout(1,2)); // 버튼 b1 생성 b1 = new JButton( "Text Button" ); c.add(b1); Icon redIcon = new ImageIcon( "./image/red.gif" ); Icon blueIcon = new ImageIcon( "./image/blue.gif" ); Icon greenIcon = new ImageIcon("./image/green.gif");
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] // 버튼 b2 생성 b2 = new JButton( "Icon Button", greenIcon ); b2.setRolloverIcon(blueIcon); // 버튼위에 마우스가 놓일때 녹색 b2.setPressedIcon(redIcon); // 버튼을 눌렀을 때 빨간아이콘 c.add(b2); ButtonHandler handler = new ButtonHandler(); b1.addActionListener( handler ); b2.addActionListener( handler ); setSize( 300, 120 ); show(); } public static void main( String args[] ) { ButtonTest fm = new ButtonTest(); fm.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] // 내부 이벤트 처리 루틴 : 다이얼로그 private class ButtonHandler implements ActionListener { public void actionPerformed( ActionEvent e ) { JOptionPane.showMessageDialog( null, e.getActionCommand()+" is pressed" ); // getActionCommand() 는 기본적으로 버튼 레이블을 반환 } } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.6 JCheckBox o 생성자 ① JCheckBox(Icon icon) JCheckBox(Icon icon, boolean selected) - 초기 선택 여부를 결정가능 ② JCheckBox(String label) JCheckBox(String label, boolean selected) - 지정된 문자열을 표시하는 체크박스 ③ JCheckBox(String label, Icon icon) JCheckBox(String label, Icon icon boolean selected) - 지정된 문자열과 아이콘을 표시하는 체크박스 생성
o 지원되는 메소드 ① void setIcon(Icon icon) - 체크 박스의 기본 아이콘을 설정 . ② void setSelectedIcon(Icon icon) - 체크박스가 선택되었을 때의 아이콘을 설정 . ③ boolean isSelected() - 체크박스의 선택여부를 반환한다 . ④ void setSelected(boolean b) - 인자 b 에 따라 체크박스의 선택 여부를 설정 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.6 JCheckBox [ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*; public class CheckBoxTest extends JFrame { JTextField t; JCheckBox red, green, blue; public CheckBoxTest() { super( "JCheckBox Test" ); Container c = getContentPane(); c.setLayout(new FlowLayout()); t = new JTextField( "red is selected", 20 ); c.add( t ); red = new JCheckBox("Red", true); green= new JCheckBox("Green"); blue = new JCheckBox("Blue", new ImageIcon("./image/blue.gif")); blue.setSelectedIcon(new ImageIcon("./image/pink.gif"));
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.6 JCheckBox [ 예제 프로그램 ] c.add( red ); c.add(green); c.add(blue); CheckBoxHandler handler = new CheckBoxHandler(); red.addItemListener(handler); green.addItemListener(handler); blue.addItemListener(handler); setSize( 275, 100 ); show(); } public static void main( String args[] ) { CheckBoxTest app = new CheckBoxTest(); app.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } }); }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.6 JCheckBox [ 예제 프로그램 ] private class CheckBoxHandler implements ItemListener { String mesg = ""; public void itemStateChanged( ItemEvent e ) { JCheckBox cb = (JCheckBox) e.getSource(); if(cb == red) { mesg = "Red"; } else if(cb == green) { mesg = "Green"; } else { mesg = "Blue"; } // 상수 ItemEvent.DESELECTED 도 지원된다 . if ( e.getStateChange() == ItemEvent.SELECTED ) { mesg += " is selected"; } else { mesg += " is deselected"; } t.setText(mesg); } } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.7 JRadioButton o 생성자 ① JRadioButton(Icon icon) JRadioButton(Icon icon, boolean selected) - 지정된 아이콘을 표시하는 라디오 버튼 생성 ② JRadioButton(String label) JRadioButton(String label, boolean selected) - 지정된 문자열을 표시하는 라디오 버튼 생성 ③ JRadioButton(String label, Icon icon) JRadioButton(String label, Icon icon boolean selected) - 지정된 문자열과 아이콘을 표시하는 라디오버튼 생성
o 지원되는 메소드 ① void setIcon(Icon icon) - 라디오 버튼의 기본 아이콘을 설정 . ② void setSelectedIcon(Icon icon) - 라디오 버튼이 선택되었을 때의 아이콘을 설정 . ③ boolean isSelected() - 라디오 버튼의 선택여부를 반환 . ④ void setSelected(boolean b) - 인자 b 에 따라 라디오 버튼의 선택 여부를 설정 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.7 JRadioButton [ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*; class RadioTest extends JFrame { JTextField t; JCheckBox red, green, blue; ButtonGroup group1; public RadioTest() { super( "RadioButton Test" ); Container c = getContentPane(); c.setLayout(new FlowLayout()); t = new JTextField( "No One is selected", 20 ); c.add( t ); red = new JCheckBox("Red", new ImageIcon("./image/red.gif"),false); green= new JCheckBox("Green",new ImageIcon("./image/green.gif"),false);
blue = new JCheckBox("Blue", new ImageIcon("./image/blue.gif"), false);
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.7 JRadioButton [ 예제 프로그램 ] ImageIcon icon = new ImageIcon("./image/pink.gif"); red.setSelectedIcon(icon); green.setSelectedIcon(icon); blue.setSelectedIcon(icon); c.add( red ); c.add(green); c.add(blue); group1 = new ButtonGroup(); // 버튼 grouping group1.add(red); group1.add(green); group1.add(blue); CheckBoxHandler handler = new CheckBoxHandler(); red.addItemListener(handler); green.addItemListener(handler); blue.addItemListener(handler); setSize( 275, 100 ); show(); }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.7 JRadioButton [ 예제 프로그램 ] public static void main( String args[] ) { RadioTest app = new RadioTest(); app.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } private class CheckBoxHandler implements ItemListener { String mesg = ""; public void itemStateChanged( ItemEvent e ) { JCheckBox cb = (JCheckBox) e.getSource(); if(cb == red) { mesg = "Red"; } if(cb == green) { mesg = "Green"; } if(cb == blue) { mesg = "Blue"; } t.setText(mesg + " is selected."); } } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.8 JComboBox o 생성자 ① JComboBox() - 아이템이 설정되지 않은 콤보박스를 만든다 . ② JComboBox(Object[] list) JComboBox(Vector list)
- 객체의 배열이나 백터 객체를 사용하여 콤보박스를 만든다 . o 지원되는 메소드 ① void setEditable(boolean b) - 인자 b 에 따라 콤보박스를 수정 가능 /불가능하게 설정한다 . ② void addItem(Object item) - 콤보박스에 item을 추가한다 . ③ void insertItemAt(Object item, int index) - 주어진 index 에 item을 삽입한다 . ④ void removeItem(Object item) - 주어진 item을 아이템 리스트에서 삭제한다 . ⑤ void removeAllItems() - 모든 아이템을 삭제한다 . ⑥ Object getSelectedItem() - 현재 선택된 객체를 반환한다 . ⑦ int getSelectedIndex() - 현재 선택된 인덱스를 반환한다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.8 JComboBox [ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*;
class ComboBoxTest extends JFrame { JComboBox colors; JLabel label; String names[] = { "red.gif", "green.gif", "pink.gif", "blue.gif" }; String path="./image/"; private Icon icons[] = { new ImageIcon( path+names[0] ), new ImageIcon( path+names[1] ), new ImageIcon( path+names[2] ), new ImageIcon( path+names[3] )};
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.8 JComboBox [ 예제 프로그램 ] public ComboBoxTest() { super( "Test JComboBox" ); Container cp = getContentPane(); cp.setLayout( new GridLayout(2,1) ); label = new JLabel( icons[ 0 ] ); cp.add( label ); colors = new JComboBox( names ); colors.setToolTipText("This is a ComboBox"); colors.addItemListener( new ItemListener() { public void itemStateChanged( ItemEvent e ) { label.setIcon( icons[ colors.getSelectedIndex() ]); } } );
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.8 JComboBox [ 예제 프로그램 ] cp.add( colors ); pack(); setSize( 240, 120 ); setVisible(true); } public static void main( String arg[] ) { ComboBoxTest fm = new ComboBoxTest(); fm.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.9 JList - JList 는 JComboBox 와 비슷 - 다중선택이 가능하고 하나 이상의 아이템을 디스플레이 가능 - JList 는 AWT 의 List 와 유사하지만 스크롤 바가 자동 생성 안됨 - JList 객체에 스크롤을 추가하기 위해서는 JScrollPane 클래스를 이용 .
o 생성자 ① JList(Object[] list) - 주어진 객체 배열로 새로운 리스트를 생성한다 . ② JList(Vector list) - 주어진 백터를 이용하여 새로운 리스트를 생성한다 . ③ JList(ListModel model) - 주어진 모델을 사용하여 새로운 리스트를 생성한다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.9 JList o 지원되는 메소드 ① void setListData(Object[] list) void setListData(Vector[] list) - 객체배열을 이용해서 리스트 데이터를 설정한다 . ② void setListData(ListModel model) - 주어진 모델을 사용해서 리스트의 모델을 설정한다 . ③ void setSelectionMode(int selMode) int getSelectionMode() - 리스트의 아이템 선택모드를 설정하거나 반환한다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.9 JList ④ int getSelectedIndex() int[] getSelectedIndices() - 현재 선택된 아이템의 인덱스 ( 또는 인덱스의 배열 ) 를 반환한다 .
⑤ Object getSelectedValue() Object[] getSelectedValues() - 현재 선택된 객체 또는 객체의 배열을 반환한다 . ⑥ boolean isSelectedIndex(int index) - 주어진 인덱스의 아이템이 선택되었으면 true, 아니면 false 를 반
환 한다 . ⑦ void setSelectedIndex(int index) void setSelectedIndices(int[] indices) - 주어진 인덱스 또는 인덱스 배열을 선택된 상태로 만든다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.9 JList [ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; class JListDemo extends JFrame implements ListSelectionListener { JList lst1, lst2; JLabel label; Container cp; String[] data= {"HanSung", "Seoul", "YonSei","Korea", "MIT","Harvard","Oxford","Yale"}; public JListDemo() { super("JList Test"); cp = getContentPane(); cp.setLayout(new FlowLayout());
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.9 JList [ 예제 프로그램 ] lst1 = new JList(data); // 두개의 JList 생성 lst2 = new JList(data); lst1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); lst2.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
// lst2 는 shift 키를 이용 multiple 선택가능 // MULTIPLE_INTERVAL_SELECTION 도 설정가능 lst2.setVisibleRowCount(4); JScrollPane sp = new JScrollPane(lst2); // lst2 스크롤 창 생성 label = new JLabel("Print in DOS 창 "); lst1.addListSelectionListener(this); // this 는 리스너 구현객체가 lst2.addListSelectionListener(this); // 실행중인 객체임을 표시 cp.add(lst1); cp.add(label); cp.add(sp); setSize(120,300); show(); }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.9 JList [ 예제 프로그램 ] public void valueChanged(ListSelectionEvent e) { String temp = data[lst1.getSelectedIndex()]; System.out.println("First JList: " + temp); System.out.print("Second JLIst: "); int[] selected = lst2.getSelectedIndices(); for(int i=0; i < selected.length; i++) { System.out.print(data[selected[i]]+" "); } System.out.println(); } public static void main( String args[] ) { JListDemo fm = new JListDemo(); fm.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.9 JList [ 도스창의 실행결과 ] C:\> java JListDemo First JList: YonSei Second JLIst: Seoul First JList: YonSei Second JLIst: Seoul YonSei First JList: YonSei Second JLIst: Seoul YonSei Korea First JList: YonSei Second JLIst: Seoul YonSei Korea
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.10 JSlider o 생성자 ① JSlider(int min, int max) - 주어진 최소값과 최대값을 가지는 JSlider 를 생성한다 . ② JSlider(int min, int max, int init_value) - 주어진 최소값 , 최대값 , 초기값을 가지는 JSlider 를 생성한다 . ③ JSlider(int orientation, int min, int max, int init_value) - 원하는 방향 즉 수직 (JSlider.VERTICAL) 또는 수평 (JSlider.HORIZON TAL) 의 JSlider 객체를 생성한다 .
o 메소드 ① int getValue() void setValue(int value) - 현재 JSlider 의 값을 설정하거나 반환한다 . ② void setMaximum(int max) void setMinimun(int min) - 현재 JSlider 의 최대값 또는 최소값을 설정한다 . ③ setPaintLabels(boolean b) - JSlider 의 레이블 표시 여부를 인자 b 로 결정한다 . ④ setLabelTable(Hashtable ht) - 주어진 Hashtable 을 사용하여 레이블을 결정한다 . ⑤ setMajorTickSpacing(int m) setMinorTickSpacing(int m) - 주 눈금 또는 보조눈금의 간격을 설정한다 . ⑥ setPaintTicks(boolean b) - 눈금을 디스플레이할 것인지를 인자 b 로 결정한다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.10 JSlider [ 예제 프로그램 ] public void stateChanged(ChangeEvent e) { // 이벤트처리 메소드 JSlider s = (JSlider) e.getSource(); slider2.setValue(2 * s.getValue()); } public static void main(String[] args){ JSliderDemo mf = new JSliderDemo(); mf.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); }}); mf.pack(); mf.setSize(400, 180); mf.setVisible(true); }}
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.11 JTextComponent o 지원되는 메소드 ① void copy() void cut() - 현재 선택된 텍스트를 시스템 클립보드로 복사하거나 이동시킨다 . ② void paste() - 시스템 클립보드의 내용을 문서로 복사한다 . ③ int getCaretPosition() void setCaretPosition(int pos) - 현재의 커릿의 위치를 설정하거나 반환한다 . ④ int getSelectionStart() int getSelectionEnd() - 선택된 영역의 처음 또는 끝 위치를 돌려준다 . ⑤ void select(int start, int end) void selectAll() - 주어진 범위의 문자들을 선택상태로 만들거나 모든 텍스트를 선택 한다 . ⑥ void setSelectionStart(int start) void setSelectionEnd(int end) - 선택 영역의 처음 또는 끝 위치를 설정한다 . ⑦ String getText() - 텍스트 컴포넌트의 텍스트를 반환한다 . ⑧ String getSelectedText() - 선택된 텍스트를 반환한다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.12 JTextField / JPasswordField o 생성자 ① JTextField(int columns) - 정해진 컬럼수를 가진 텍스트 필드를 생성한다 . ② JTextField(String text, int columns) - 정해진 컬럼수와 초기화 문자열을 디스플레이하는 텍스트 필드를 생성 한다 . ③ JTextField(String text) - 초기화 문자열을 디스플레이하는 텍스트 필드를 생성한다 .
o 지원되는 메소드 ① void setColumns(int columns) - 텍스트 필드의 컬럼수를 설정한다 . ② int getLength() - 텍스트 필드의 문자수를 반환한다 . ③ String getText(int offset, int length) - 텍스트 필드 문자열에서 원하는 일부를 반환한다 . ④ void addDocumentListener(DocumentListener Listener) - 문서 변경 이벤트를 처리하는 리스너에 등록한다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.12 JTextField / JPasswordField [ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class JTextFieldTest extends JFrame{ JTextField name; JPasswordField passwd; JLabel label1, label2; MYListener myListener;
JTextFieldTest() { super("JTextField Demo"); myListener = new MYListener();
Container c= getContentPane(); c.setLayout(new GridLayout(0, 1));
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.12 JTextField / JPasswordField name = new JTextField(); name.setBorder(new TitledBorder("Name Field")); name.addActionListener(myListener); c.add(name); passwd = new JPasswordField(); passwd.setBorder(new TitledBorder("Pass word Field")); passwd.addActionListener(myListener); c.add(passwd); label1 = new JLabel(); label1.setBorder(new TitledBorder("Your Input is")); c.add(label1);
label2 = new JLabel(); label2.setBorder(new TitledBorder("Your Password is")); c.add(label2); }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.12 JTextField / JPasswordField class MYListener implements ActionListener{ public void actionPerformed(ActionEvent ev){ if (ev.getSource() == name) { label1.setText("Name: " + name.getText()); label2.setText("It's not password"); } else if (ev.getSource() == passwd) { label1.setText("PassWord: "+ passwd.getPassword()); label2.setText(new String(passwd.getPassword())); } } } public static void main(String[] args){ JTextFieldTest f = new JTextFieldTest(); f.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); f.setSize(220, 220); f.setVisible(true); } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.13 JTextArea o 생성자 ① JTextArea(int rows, int cols) - 원하는 행 , 열의 수를 가진 텍스트 영역을 생성한다 . ② JTextArea(String text, int rows, int cols) - 원하는 크기와 주어진 문자열을 표시하는 텍스트 영역을 생성한다 . o 메소드 ① void setColumns(int cols) void setRows(int rows) - 텍스트 영역에서 원하는 열 또는 행의 수를 설정한다 . ② void append(String str) void insert(String str, int position) - 문자열을 추가하거나 원하는 위치에 삽입한다 . ③ void setLineWrap(boolean b) - 한 라인의 문자열이 텍스트 영역의 폭보다 넓을 때 , 자동으로 다음 줄에
표시할 것인지를 설정한다 . ④ void setTabSize(int size) - 탭의 크기를 설정한다 . 인자 size 는 탭이 멈추어야 할 열의 수를 나타 낸다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.13 JTextArea [ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*; class JTextAreaTest extends JFrame implements ActionListener { JTextArea ta1, ta2; JButton b1; JTextAreaTest() { super("JTextArea Demo");
Container c = getContentPane(); c.setLayout(new FlowLayout());
ta1 = new JTextArea(5,12); ta1.append("This is a \nTextArea\n"); ta1.append("It is a good\nJFC Component\n"); ta1.append("\n Written by Kim"); c.add(new JScrollPane(ta1));
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.13 JTextArea [ 예제 프로그램 ] b1 = new JButton("Copy"); b1.addActionListener(this); c.add(b1); ta2 = new JTextArea("No mesg", 5,12); c.add(new JScrollPane(ta2)); pack(); show(); } public void actionPerformed(ActionEvent e) { ta2.setText(ta1.getSelectedText()); } public static void main( String args[] ) { JTextAreaTest f = new JTextAreaTest(); f.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } }); } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.4 경량 컨테이너 - 경량 컨테이너 JPanel, JTabbedPane, JSplitPane - 경량 컨테이너 객체에 컴포넌트를 부착할 경우에는 , contentPane 을 구하
지 않고 직접 add() 를 사용하는 것이 가능
15.4.1 JPanel o 생성자 ① JPanel() - 이중 버퍼링과 FlowLayout 이 기본값이다 . ② JPanel(boolean doubleBuffering) - 이중 버퍼링 가부를 정한 JPanel 객체를 설정한다 . ③ JPanel(LayoutManager lo) - 주어진 Layout 을 사용하는 JPanel 객체를 설정한다 . ④ JPanel(LayoutManager lo, boolean doubleBuffering)
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 o 주요 메소드 ① add(Component c) - JPanel 객체에 컴포넌트 c 를 부착한다 . ② setLayout(LayoutManager m) - JPanel 객체의 레이아웃을 설정한다 .
다음은 JPanel 을 사용하여 간단한 계산기를 구현한 예제 프로그램이다 . 6 개의 버튼을 JPanel 객체 pane 에 부착한 후 , pane 을 JFrame 에 부착하였다 .
비록 단순하고 숫자버튼이 부족하지만 다음 프로그램을 응용하면 계산기 프로그램을 작성할 수 있을 것이다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] // 팬널을 포함한 간단한 계산기 예제 import java.awt.*; import java.awt.event.*; import javax.swing.*; class JPanelDemo extends JFrame implements ActionListener { JTextField tf; JButton b1,b2,b3,bEq,bPlus,bClear; int sum = 0; JPanelDemo() { super("Simple Calculator"); Container c = getContentPane(); c.setLayout(new BorderLayout(3,6)); tf = new JTextField(); c.add(tf, BorderLayout.NORTH);
JPanel pane = new JPanel(new GridLayout(2,3)); // 패널창이 다음 버튼을 포함한다
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] pane.add(b1=new JButton("1")); pane.add(b2=new JButton("2")); pane.add(b3=new JButton("3")); pane.add(bPlus=new JButton("+")); pane.add(bEq=new JButton("=")); pane.add(bClear=new JButton("Clear"));
b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); bEq.addActionListener(this); bPlus.addActionListener(this); bClear.addActionListener(this);
// 버튼을 포함한 패널창을 프레임에 부착 c.add(pane, BorderLayout.CENTER);
setSize(240,180); show(); }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] public void actionPerformed(ActionEvent e) { JButton btn = (JButton) e.getSource(); if (btn == bClear) { tf.setText(""); sum = 0; } else if (btn == bPlus) { sum += Integer.parseInt(tf.getText()); tf.setText(""); } else if (btn == bEq) { sum += Integer.parseInt(tf.getText()); tf.setText(""+sum); } else { String t = tf.getText()+btn.getActionCommand(); tf.setText( t ); // 버튼의 getActionCommand() 반환 기본값은 버튼 문자열
} }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] public static void main( String args[] ) { JPanelDemo fm = new JPanelDemo(); fm.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.4.2 JTabbedPane o 생성자 ① JTabbedPane() ② JTabbedPane(int tapLocation) - 원하는 위치에 탭을 설정한 JTabbedPane 객체를 생성한다 . 인자로 사용
할 수 있는 상수는 TOP, BOTTOM, LEFT, RIGHT 중에 하나이다 . o 메소드 ① void addTab(String title, Icon icon, Component comp, String tooltip) - JTabbedPane 객체의 타이틀 , 아이콘 , 부착할 컴포넌트 , 툴팁을 설정한다 .
② void addTab(String title, Icon icon, Component comp) - JTabbedPane 객체의 타이틀 , 아이콘 , 부착할 컴포넌트를 설정한다 . ③ void addTab(String title, Component comp) - JTabbedPane 객체의 타이틀 , 부착할 컴포넌트를 설정한다 . ④ void inserTab(String title, Icon icon, Component c, String tip, int index) - 새로운 탭 창을 원하는 인덱스에 추가한다 . 인덱스는 0부터 시작한다 . ⑤ void removeAll() - 탭 창의 모든 컴포넌트를 제거한다 . ⑥ void removeTabAt(index) - 원하는 위치의 컴포넌트를 제거한다 . ⑦ int getTabCount() - 탭의 개수를 반환한다 . ⑧ getComponentAt(int index) - 주어진 인덱스의 컴포넌트를 반환한다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.4.2 JTabbedPane [ 예제 프로그램 ] import javax.swing.*; import javax.swing.table.*; import java.awt.*; import java.awt.event.*; // 이번은 JPanel 을 상속받아 새로운 클래스를 정의하였슴 . public class JTabbedPaneTest extends JPanel { // 새 탭창 생성 : 가능옵션 TOP, BOTTOM, LEFT, RIGHT JTabbedPane tPane = new JTabbedPane( JTabbedPane.TOP ); ImageIcon icon1 = new ImageIcon( "image/red.gif" ); ImageIcon icon2 = new ImageIcon( "image/green.gif" );
JPanel panel1 = new JPanel( new BorderLayout() ); JPanel panel2 = new JPanel( new BorderLayout() ); JLabel label1 = new JLabel( "It's Red Tab Pane" ); JLabel label2 = new JLabel( "It's Green Tab Pane" );
Font font = new Font("TimesRoman", Font.BOLD, 20);
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.4.2 JTabbedPane public JTabbedPaneTest() { label1.setHorizontalAlignment( JLabel.CENTER ); label2.setHorizontalAlignment( JLabel.CENTER ); label1.setFont(font); label2.setFont(font); panel1.add( label1 ); panel2.add( label2 ); // 탭페인에 탭 설정 : 이름 , 아이콘 , 창 , 툴팁텍스트 tPane.addTab( "Red Tab", icon1, panel1, "First Tab pane." ); tPane.addTab( "Green Tab", icon2, panel2, "Second Tab pane." ); // 초기화면에 green tab 설정 tPane.setSelectedIndex( 1 ); // JPanel 의 레이아웃 설정 setLayout( new GridLayout( 1, 1 ) ); // 탭 페인을 JPanel 에 부착 add( tPane ); }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.4.2 JTabbedPane public static void main( String[] args ) { // 새 JFrame 객체 생성 JFrame fm = new JFrame( "JTabbedPane Test" ); // 새 JTabbedPaneTest 객체 생성 JTabbedPaneTest myPane = new JTabbedPaneTest(); // JTabbedPaneTest 객체를 JFrame 에 부착 fm.getContentPane().add( myPane, BorderLayout.CENTER ); fm.setSize( 300, 200 ); fm.show(); fm.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } }); } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.4.3 JSplitPane o 생성자 ① JSplitPane(int orientation) - 화면 분할 방향을 설정한다 . (VERTICAL_SPLIT, HORIZONTAL_SPLIT) ② JSplitPane(int orientation, boolean continuousLayout) - 화면 분할 방향 및 redrawing 스타일을 지정한다 . ③ JSplitPane(int orientation, Component leftComp, Component rightComp) - 화면의 분할 방향과 부착할 컴포넌트를 설정한다 . ④ JSplitPane(int orientation, boolean continuousLayout, Component leftComp,
Component rightComp) o 지원되는 메소드 ① void setOrientation(int orientation) - 화면 분할 방향을 설정한다 . ② setLeftComponent(Component c) setTopComponent(Component c) - 왼쪽 또는 위쪽에 부착할 컴포넌트를 설정한다 . ③ setRightComponent(Component c) setBottomComponent(Component c) ④ setDividerLocation(double proportional_ratio) - 분할자의 위치를 비율로 설정한다 .(0.0 - 1.0 사이의 double 값 ) ⑤ setDivierLocation(int location) - 분할자의 위치를 픽셀 단위로 정한다 . ⑥ setDividerSize(int size) - 분할자의 두께를 픽셀 단위로 정한다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.4.3 JSplitPane [ 예제 프로그램 ] import javax.swing.*; import javax.swing.table.*; import java.awt.*; import java.awt.event.*;
public class JSplitPaneTest extends JPanel { JSplitPane sPane;
// split 창에 부착할 panel 두개 생성 JPanel panel1 = new JPanel( new BorderLayout() ); JPanel panel2 = new JPanel( new BorderLayout () ); JLabel label1 = new JLabel( "Pane One" ); JLabel label2 = new JLabel( "Pane Two" );
Font font = new Font("Helvetica", Font.BOLD, 20);
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.4.3 JSplitPane public JSplitPaneTest() { sPane = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, panel1, panel2 ); label1.setHorizontalAlignment( JLabel.CENTER ); label2.setHorizontalAlignment( JLabel.CENTER ); // 레이블의 폰트 설정 label1.setFont(font); label2.setFont(font); // 패널에 레이블 부착 panel1.add( label1 ); panel2.add( label2 ); setLayout( new GridLayout( 1, 1 ) );
// 수평으로 쪼갤 위치의 설정 sPane.setDividerLocation( 150 ); add( sPane ); // split 창을 JPanel 에 부착 // JPanel 은 경량 컨터이너이므로 // getContentPane() 이 불필요 }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.4.3 JSplitPane public static void main( String[] args ) { JFrame fm = new JFrame( "JSplitPane Test" ); JSplitPaneTest sp = new JSplitPaneTest(); // 생성된 split 창을 프레임에 부착 fm.getContentPane().add(sp, BorderLayout.CENTER ); fm.setSize( 400, 200 ); fm.setVisible( true ); fm.addWindowListener ( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.4.4 Box 컨테이너와 BoxLayout o Box 클래스의 메소드 ① static Box createHorizontalBox() - 컴포넌트를 왼쪽부터 한줄로 배치하는 Box 객체를 생성한다 . ② static Box createVerticalBox() - 컴포넌트를 위에서부터 한줄로 배치하는 Box 객체를 생성한다 . ③ static Component createGlue() - 컴포넌트 간격을 최대화시키는데 사용되는 투명 컴포넌트를 반환한다 . ④ static Component createHorizontalStrut(int width) - 주어진 고정 넓이를 가진 투명 컴포넌트를 반환한다 . ⑤ static Component createRigidArea(Dimension d) - 주어진 dimension d 를 가진 투명 컴포넌트를 반환한다 . ⑥ static Component createVerticalStrut(int height) - 주어진 고정 높이를 가진 투명 컴포넌트를 반환한다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.4.4 Box 컨테이너와 BoxLayout [ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*; class BoxDemo1 extends JFrame { Box hBox, vBox; BoxDemo1() { super("Box Demo One"); Toolkit tk = getToolkit(); // 윈도우 툴킷 생성 Dimension wSize = tk.getScreenSize(); // 화면 크기 구하기 // 프레임의 위치와 크기 설정 setBounds(wSize.width/4, wSize.height/4, // 위치 설정 wSize.width/2, wSize.height/2); // 크기 설정 (화면의 1/2) Container c = getContentPane(); c.setLayout(new BorderLayout());
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 vBox = Box.createVerticalBox(); for(int i=1; i<5; i++) vBox.add(new JButton("Btn "+i)); hBox = Box.createHorizontalBox(); for(int i=1; i<5; i++) hBox.add(new JCheckBox("Chk "+ i)); c.add(hBox,BorderLayout.NORTH); c.add(vBox,BorderLayout.WEST); show(); } public static void main( String args[] ) { BoxDemo1 f= new BoxDemo1(); f.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*;
class BoxDemo2 extends JFrame { Box hBox, vBox, hBox2, vBox2; BoxDemo2() { super("Box Demo One"); Toolkit tk = getToolkit(); // 윈도우 툴킷 생성 Dimension wSize = tk.getScreenSize(); // 화면 크기 구하기 // 프레임의 위치와 크기 설정 setBounds(wSize.width/4, wSize.height/4,// 위치 설정 wSize.width/2, wSize.height/2); // 크기 설정 (화면의 1/2) Container c = getContentPane(); c.setLayout(new BorderLayout());
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] vBox = Box.createVerticalBox(); for(int i=1; i<5; i++) { vBox.add(new JButton("Button1: "+i)); vBox.add(Box.createVerticalStrut(i*6)); } hBox = Box.createHorizontalBox(); for(int i=1; i<5; i++) { hBox.add(new JCheckBox("Check1: "+ i)); hBox.add(Box.createHorizontalStrut(i*6)); } hBox2 = Box.createHorizontalBox(); for(int i=1; i<5; i++) { hBox2.add(new JCheckBox("Check2: "+ i)); hBox2.add(Box.createRigidArea(new Dimension(i*6, 10))); } vBox2 = Box.createVerticalBox(); for(int i=1; i<5; i++) { vBox2.add(new JButton("Button2: "+i)); vBox2.add(Box.createGlue()); }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] c.add(hBox,BorderLayout.NORTH); c.add(vBox,BorderLayout.WEST); c.add(hBox2,BorderLayout.SOUTH); c.add(vBox2,BorderLayout.EAST); show(); } public static void main( String args[] ) { BoxDemo2 f= new BoxDemo2(); f.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.6 메뉴 15.6.1 메뉴의 종류 ① 메뉴바 - 메뉴가 부착되는 일종의 컨테이너 객체이다 . 메뉴를 작성하기 위해서 가 장 먼저 생성해야 할 객체이다 . ② 메뉴 - 메뉴바에 부착되는 컴포넌트이다 . 그림 22 에서 [File_Menu], [Edit_Menu], [Help] 등이 모두 메뉴이다 . ③ 메뉴 아이템 - 메뉴바의 메뉴위에 마우스를 클릭하면 , 일반적으로 메뉴 아이템들이 표 시 된다 . 사용자는 이 메뉴 아이템을 선택함으로써 원하는 작업을 실행한다 . 사용 자가 메뉴 아이템을 선택하면 , ActionEvent 가 발생한다 . 그림 22 에서 [Cut],
[Copy], [Paste], [Options] 등이 메뉴 아이템이다 . ④ 서브 메뉴 - 메뉴 아이템을 선택함으로써 다른 메뉴를 호출할 수 있다 . 메뉴 아이템 을 선택함으로써 호출되는 메뉴를 서브 메뉴라고 한다 . 그림 22 의 메뉴 아이템 [Options] 는 서브 메뉴를 가지고 있음을 보여 주고 있다 .
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.6 메뉴 15.6.1 메뉴의 종류
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.5.2 메뉴 만들기 - 메뉴를 생성하는 과정을 간단히 정리하면 다음과 같다 . ① 메뉴바를 생성한다 . 메뉴바를 생성하는 방식은 다음과 같다 . JMenuBar mb = new JMenuBar(); ② 메뉴를 생성하여 메뉴바에 부착한다 . JMenu fileMenu = new JMenu("File"); mb.add(fileMenu); ③ 메뉴 아이템을 생성한다 . JMenuItem newFile = new JMenuItem("New"); JMenuItem openFile = new JMenuItem("Open", new ImageIcon("open.gif"); // 이미지 사용시 ④ 메뉴 아이템을 메뉴에 부착한다 . fileMenu.add(newFile); fileMenu.addSeparator(); // 필요에 따라 분리선을 긋는다 . fileMenu.add(openFile); ⑤ 메뉴 아이템에 이벤트 리스너 등록을 한다 . newFile.addActionListener(actionListenerObject); openFile.addActionListener(actionListenerObject); ⑥ 메뉴바를 setJMenuBar() 메소드를 사용하여 컨테이너에 부착한다 . frame.setJMenuBar();
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class MenuBar1 extends JFrame implements ActionListener { JMenuItem open, save, print, exit; JTextArea ta; MenuBar1() { super("Menu Demo"); JMenuBar mb = new JMenuBar(); JMenu file = new JMenu("File"); mb.add(file); file.add(open = new JMenuItem("Open")); file.add(save = new JMenuItem("Save")); file.addSeparator(); file.add(print = new JMenuItem("Print")); file.addSeparator(); file.add(exit = new JMenuItem("Exit",'X'));
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] open.addActionListener(this); save.addActionListener(this); print.addActionListener(this); exit.addActionListener(this); setJMenuBar(mb);
ta = new JTextArea(); getContentPane().add(ta,"Center");
setSize(300,200); show(); } public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); if(cmd.equals("Exit")) System.exit(0); else ta.append("Your selection is "+cmd+"\n"); }
15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] public static void main( String args[] ) { MenuBar1 fm = new MenuBar1(); fm.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); } }