chap 15. swing

83
Chap 15. Swing Chap 15. Swing

Upload: opal

Post on 14-Jan-2016

198 views

Category:

Documents


0 download

DESCRIPTION

Chap 15. Swing. 15. Swing. - AWT 를 한단계 발전시킨 자바 그래픽 사용자  인터페이스  패키지 - Java 1.2 에는 표준 패키지로 포함 - AWT 에 비해 훨씬 화려한  GUI  프로그래밍 가능 - Swing 은  JFC 의 일부 - JFC 는  Java Foundation Classes 의 약자 .  - JFC 의 특징. 15. Swing. 15. Swing. 15.1 Swing  응용 프로그램의 구조. 15. Swing. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chap 15. Swing

Chap 15. SwingChap 15. Swing

Page 2: Chap 15. Swing

15. Swing15. Swing

- AWT를 한단계 발전시킨 자바 그래픽 사용자    인터페이스  패키지 - Java 1.2에는 표준 패키지로 포함 - AWT에 비해 훨씬 화려한  GUI 프로그래밍 가능 - Swing은  JFC의 일부 - JFC는  Java Foundation Classes의 약자 . 

- JFC의 특징 

Page 3: Chap 15. Swing

15. Swing15. Swing

Page 4: Chap 15. Swing

15. Swing15. Swing

15.1 Swing 응용 프로그램의 구조

Page 5: Chap 15. Swing

15. Swing15. Swing

15.1 Swing  응용 프로그램의 구조① Heavyweight  컨테이너 

    Swing  응용 프로그램의 최상위 레벨은 중량 (heavyweight)  컨테이너를 

   포함하고 있으며 ,  응용 프로그램의 메인 윈도우는 반드시 중량 컨테이

   너에 부착되어야 한다 . JFrame, JApplet  등이 중량 컨테이너에 속한다 . 

② JRootPane 

    중량 컨테이너는 루트 페인 (root pane) 이라 불리는 객체를 가지고 있으

    며 ,   루트 페인은 툴팁 (tool tip) 이나  드래그  &  드롭과 같은 중요 기능을

    지원한다 . 

③ JLayeredPane 

     계층 페인 (layered pane) 은 메뉴바와 컨텐츠 페인 (content pane) 을 관리

    하며 ,  컴포넌트간의 오버래핑을 가능하게 해준다 . 

Page 6: Chap 15. Swing

15. Swing15. Swing15.1 Swing  응용 프로그램의 구조④ JMenuBar     메뉴바는  JMenuBar  클래스에 의해서 구현되며 ,  일반적인 메뉴바    기능을 지원한다 . ⑤ contentPane     컨텐츠 페인 (contentPane) 은 중량 컨테이너에 부착되는 모든 컴포넌   트의 접속창 역할을 한다 . AWT와는 달리  Swing 에서는 먼저 중량    컨테이너의  layout  관리자를 설정하거나 중량 컨테이너에 컴포넌트   를 부착하기 위해서는 먼저 컨텐츠 페인을 구하여야 한다 .  컨텐츠    페인을 구한 후 , layout  관리자를 설정하는 예는 다음과 같다 .                 Component cp = getContentPane();                 cp.setLayout(new BorderLayout()); 

Page 7: Chap 15. Swing

15. Swing15. Swing

15.1 Swing  응용 프로그램의 구조

     또한 컨텐츠 페인을 구한 후 ,  버튼과 같은 컴포넌트를 중량

   컨테이너에 부착하는 예는 다음과 같다 . 

      Container cp = getContentPane(); 

      cp.add(new Button("push")); 

    또는 간단하게 다음과 같이 한줄로 쓸 수 있다 . 

      getContentPane().add(new Button("push")); 

Page 8: Chap 15. Swing

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 을 구할 필요가 없다 . 

Page 9: Chap 15. Swing

15. Swing15. Swing

15.2 Swing  프로그램 작성 순서  

④  컨테이너의 레이아웃을 설정한다 .  필요한 컴포넌트를 설정하고 컨테이너에 부착시킨다 .  중량 컨테이너에 컴포넌트를 부착하거나 레이아웃을 설정할 때에는 먼저  ContentPane 을 구하여야 한다 .  경량 컨테이너에서는  ContentPane 을 구할 필요가 없다 . 

⑤  이벤트 처리가 필요한 컴포넌트의 이벤트 처리 루틴을 작성한 후 ,  컴포넌트를 등록한다 . 

⑥  컨테이너의 위치와 크기를 설정하고 , setVisible(Ture)  또는 show()  메소드를 사용하여 컨테이너가 보여지도록 한다 . 

Page 10: Chap 15. Swing

15. Swing15. Swing

15.3 Swing 의 주요 컴포넌트 15.3.1 JFrame 

  - JFrame 은  Swing 의 최상위 윈도우이다 .  

    - JFrame 은   중량  컨테이너 (Heavyweight Container) 로서  응용  프로그램은 

      반드시 하나 이상의 중량 컨테이너를 가져야 한다 .  

  - JFrame  객체에 버튼이나 레이블과 같은 컴포넌트를 부착할 수 있다 . 

  - JFrame  클래스는 다음과 같은 생성자와 메소드를 지원한다 . 

o  생성자 

  ① JFrame() 

  ② JFrame(String title) 

     -  타이틀을  title 로 설정한  JFrame객체를 생성한다 . 

Page 11: Chap 15. Swing

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  객체에 등록한다 . 

Page 12: Chap 15. Swing

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 );         }  }  );  }  } 

Page 13: Chap 15. Swing

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  등을 사용할     수 있다 . 

Page 14: Chap 15. Swing

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  수로 나타낸다 . 

Page 15: Chap 15. Swing

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); 

Page 16: Chap 15. Swing

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); }    });   }} 

Page 17: Chap 15. Swing

15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.3 Border Border 는  Swing  컴포넌트의 경계선의 모양을 설정해주는 클래스이다 . Border

를 사용하면 컴포넌트의 경계선에 다양한 모양을 설정할 수 있다 .  Border를

사용하기 위해서는 프로그램 시작부분에서  javax.swing.border  패키지를 별도로 선언하여야 한다 . 

Page 18: Chap 15. Swing

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)); 

Page 19: Chap 15. Swing

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);     } 

Page 20: Chap 15. Swing

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); }       });    } } 

Page 21: Chap 15. Swing

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"); 

Page 22: Chap 15. Swing

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); }    });   }} 

Page 23: Chap 15. Swing

15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.3.5 JButton o  생성자    ① JButton()           ② JButton(Icon icon)           ③ JButton(String text)    ④ JButton(String text, Icon icon) 

Page 24: Chap 15. Swing

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이 허용된다 . 

Page 25: Chap 15. Swing

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) 

Page 26: Chap 15. Swing

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"); 

Page 27: Chap 15. Swing

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 );          }       }     );    } 

Page 28: Chap 15. Swing

15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 [ 예제 프로그램 ] // 내부 이벤트 처리 루틴 :  다이얼로그     private class ButtonHandler implements ActionListener {       public void actionPerformed( ActionEvent e )       {          JOptionPane.showMessageDialog( null,             e.getActionCommand()+" is pressed" );          // getActionCommand() 는 기본적으로 버튼 레이블을 반환       }    } } 

Page 29: Chap 15. Swing

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 에 따라 체크박스의 선택 여부를 설정 . 

Page 30: Chap 15. Swing

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")); 

Page 31: Chap 15. Swing

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 ); }          });    } 

Page 32: Chap 15. Swing

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);       }    } } 

Page 33: Chap 15. Swing

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 에 따라 라디오 버튼의 선택 여부를 설정 . 

Page 34: Chap 15. Swing

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); 

Page 35: Chap 15. Swing

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();    } 

Page 36: Chap 15. Swing

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.");       }   }   } 

Page 37: Chap 15. Swing

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()   -  현재 선택된 인덱스를 반환한다 . 

Page 38: Chap 15. Swing

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] )}; 

Page 39: Chap 15. Swing

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() ]);             }          }       ); 

Page 40: Chap 15. Swing

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 );             }          }       );    } } 

Page 41: Chap 15. Swing

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)   -  주어진 모델을 사용하여 새로운 리스트를 생성한다 . 

Page 42: Chap 15. Swing

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()       -  리스트의 아이템 선택모드를 설정하거나 반환한다 . 

Page 43: Chap 15. Swing

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)     -  주어진 인덱스 또는 인덱스 배열을 선택된 상태로 만든다 . 

Page 44: Chap 15. Swing

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()); 

Page 45: Chap 15. Swing

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();   } 

Page 46: Chap 15. Swing

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 );  } } ); } } 

Page 47: Chap 15. Swing

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 

Page 48: Chap 15. Swing

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 로 결정한다 . 

Page 49: Chap 15. Swing

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);   }}  

Page 50: Chap 15. Swing

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()    -  선택된 텍스트를 반환한다 . 

Page 51: Chap 15. Swing

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)     - 문서 변경 이벤트를 처리하는 리스너에 등록한다 . 

Page 52: Chap 15. Swing

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)); 

Page 53: Chap 15. Swing

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);   } 

Page 54: Chap 15. Swing

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);   } } 

Page 55: Chap 15. Swing

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 는 탭이 멈추어야 할 열의 수를 나타        낸다 . 

Page 56: Chap 15. Swing

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)); 

Page 57: Chap 15. Swing

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 );           }      });   } } 

Page 58: Chap 15. Swing

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) 

Page 59: Chap 15. Swing

15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 o  주요 메소드 ① add(Component c)      - JPanel  객체에 컴포넌트  c 를 부착한다 . ② setLayout(LayoutManager m)      - JPanel  객체의 레이아웃을 설정한다 . 

   다음은  JPanel 을 사용하여 간단한 계산기를 구현한 예제 프로그램이다 . 6 개의 버튼을  JPanel  객체  pane 에 부착한 후 , pane 을  JFrame 에 부착하였다 . 

비록 단순하고 숫자버튼이 부족하지만 다음 프로그램을 응용하면 계산기 프로그램을 작성할 수 있을 것이다 . 

Page 60: Chap 15. Swing

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));     //  패널창이 다음 버튼을 포함한다 

Page 61: Chap 15. Swing

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();   }   

Page 62: Chap 15. Swing

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() 반환  기본값은 버튼 문자열 

    }   } 

Page 63: Chap 15. Swing

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 );            }         }      );   } } 

Page 64: Chap 15. Swing

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)   -  주어진 인덱스의 컴포넌트를 반환한다 . 

Page 65: Chap 15. Swing

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); 

Page 66: Chap 15. Swing

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 );         } 

Page 67: Chap 15. Swing

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 );                 }         });     } } 

Page 68: Chap 15. Swing

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)   -  분할자의 두께를 픽셀 단위로 정한다 . 

Page 69: Chap 15. Swing

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); 

Page 70: Chap 15. Swing

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() 이 불필요               } 

Page 71: Chap 15. Swing

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 );                 }             }         );     } } 

Page 72: Chap 15. Swing

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)     -  주어진 고정 높이를 가진 투명 컴포넌트를 반환한다 . 

Page 73: Chap 15. Swing

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()); 

Page 74: Chap 15. Swing

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 );             }          }       );    } } 

Page 75: Chap 15. Swing

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()); 

Page 76: Chap 15. Swing

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());      } 

Page 77: Chap 15. Swing

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 );             }          }       );    } }  

Page 78: Chap 15. Swing

15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.6  메뉴  15.6.1  메뉴의 종류 ①  메뉴바    -  메뉴가 부착되는 일종의 컨테이너 객체이다 .  메뉴를 작성하기 위해서 가     장 먼저 생성해야 할 객체이다 . ②  메뉴    -  메뉴바에 부착되는 컴포넌트이다 .        그림  22  에서  [File_Menu], [Edit_Menu], [Help]  등이 모두 메뉴이다 . ③  메뉴 아이템    -  메뉴바의 메뉴위에 마우스를 클릭하면 ,  일반적으로 메뉴 아이템들이 표      시 된다 .     사용자는 이 메뉴 아이템을 선택함으로써 원하는 작업을 실행한다 .  사용     자가 메뉴 아이템을 선택하면 , ActionEvent 가 발생한다 .  그림  22 에서  [Cut],

     [Copy], [Paste], [Options]  등이 메뉴 아이템이다 . ④  서브 메뉴    -  메뉴 아이템을 선택함으로써 다른 메뉴를 호출할 수 있다 .  메뉴 아이템      을 선택함으로써 호출되는 메뉴를 서브 메뉴라고 한다 .  그림  22 의 메뉴      아이템  [Options] 는 서브 메뉴를 가지고 있음을 보여 주고 있다 . 

Page 79: Chap 15. Swing

15. Swing15. Swing15.3 Swing 의 주요 컴포넌트 15.6  메뉴  15.6.1  메뉴의 종류 

Page 80: Chap 15. Swing

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();  

Page 81: Chap 15. Swing

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')); 

Page 82: Chap 15. Swing

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");   } 

Page 83: Chap 15. Swing

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 );             }          }       );   } }