프로그래머를 위한 Java 2 제8장 스윙(Swing)
8.1 스윙 소개 JFC (Java Foundation Classes) 스윙은 보다 세련된 형태의 GUI를 제공하기 위해서 만들어진 사용자 인터페이스 클래스들 모임 JFC 구성 AWT Java 2D Accessibility 드래그-앤-드랍(drag-and-drop) 스윙(swing)
8.1 스윙 소개 SwingSet 데모 프로그램 C:\> cd <JDK>\demo\jfc\SwingSet2 C:\> java -jar SwingSet2.jar
8.1 스윙 소개 스윙 컴포넌트 클래스 상속도
8.2 스윙 컴포넌트 8.2.1 JComponent 8.2.2 JFrame 스윙 프레임은 JFrame 클래스 스윙에서 톱 레벨(top level) 컨테이너(예: JFrame, JApplet, JDialog)는 JComponent 클래스로부터 상속받지 않는다. 8.2.2 JFrame 스윙 프레임은 JFrame 클래스 Jframe가 AWT의 Frame 클래스와 다른점 컴포넌트를 붙일 때는 getContentPane() 함수를 호출해서 붙인다. JFrame frame = new JFrame(); frame.getContentPane().setLayout(new FlowLayout()); frame.getContentPane().add(childComponent);
8.2 스윙 컴포넌트 JFrame 생성자 JFrame의 메소드들 Container getContentPane() JFrame(GraphicsConfiguration gc) JFrame(String title) JFrame(String title, GraphicsConfiguration gc) JFrame의 메소드들 Container getContentPane() Component getGlassPane() JMenuBar getJMenuBar() void remove(Component comp) void setContentPane(Container contentPane) void setJMenuBar(JMenuBar menubar) void setLayout(LayoutManager manager) ……etc.
8.2 스윙 컴포넌트 예제: JFrameTest.java 1 import javax.swing.*; 2 3 public class JFrameTest extends JFrame { 5 public JFrameTest() { 6 super("스윙 JFrame 테스트"); 7 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 8 setSize(300, 200); 9 setVisible(true); 10 } 11 12 public static void main(String args[]) { 13 JFrame jf = new JFrameTest(); …..
8.2 스윙 컴포넌트 8.2.3 JLabel 과 JButton 1. JLabel 생성자 JLabel(String text, Icon icon, int horizontalAlignment) JLabel(String text, int horizontalAlignment) JLabel(String text) JLabel(Icon image, int horizontalAlignment) JLabel(Icon image) JLabel() horizontalAlignment은 라벨의 위치를 지정하는 부분으로 LEFT, CENTER, RIGHT,LEADING,TRAILING 값 중에서 하나를 선택할 수 있다. 디폴트로는 CENTER 값을 갖는다. 레벨의 텍스트 내용을 알아보거나 값을 설정하는 메소드 String getText() void setText(java.lang.String text)
8.2 스윙 컴포넌트 라벨 텍스트의 폰트 지정을 위한 메소드 void setFont(java.awt.Font font) 라벨의 아이콘을 위한 메소드 Icon getIcon() void setIcon(Icon icon) 수직 및 수평 방향의 위치를 위한 메소드 int getHorizontalAlignment() void setHorizontalAlignment(int alignment) int getVerticalAlignment() void setVerticalAlignment(int alignment) setHorizontal Alignment() 메소드에서는 LEFT, CENTER, RIGHT 값 중에 하나를 사용 setVerticalAlignment() 메소드에서는 TOP, CENTER, BOTTOM 중에 하나를 사용
8.2 스윙 컴포넌트 라벨 텍스트의 위치 지정을 위한 메소드 int getHorizontalTextPosition() void setHorizontalTextPosition(int textPosition) int getVerticalTextPosition() void setVerticalTextPosition(int textPosition) setHorizontalTextPosition() 메소드에서는 LEFT, CENTER, RIGHT 값 중에 하나를 사용 setVerticalTextPosition() 메소드에서는 TOP, CENTER, BOTTOM 중에 하나를 사용 모든 스윙 GUI 컴포넌트들은 JComponent 클래스로부터 상속 JComponent는 또한 java.awt.Container 클래스로부터 상속받았으므로 JLabel이나 JButton 등의 스윙 컴포넌트는 자바 AWT의 GUI 컴포넌트를 포함할 수 있다.
8.2 스윙 컴포넌트 2. AbstractButton AbstractButton 클래스로부터 상속받은 클래스는 JButton , CheckBox, JRadioButton, JMenuItem, JMenu, JToggleButton 등 버튼 상속관계
8.2 스윙 컴포넌트 AbstractButton 클래스의 중요한 메소드들 버튼의 디폴트 아이콘을 설정 또는 아이콘을 알아보는 메소드. Icon getIcon() - 디폴트 아이콘 얻음. void setIcon(Icon defaultIcon) - 디폴트 아이콘 설정. 버튼의 텍스트를 알아보거나 값을 설정하는 메소드 String getText() - 버튼의 텍스트를 리턴한다. void setText(String text) - 버튼의 텍스트를 설정한다. 버튼의 위치에 관한 메소드를. int getHorizontalAlignment() void setHorizontalAlignment(int alignment) int getVerticalAlignment() void setVerticalAlignment(int alignment)
8.2 스윙 컴포넌트 수평 방면 alignment 값으로 LEFT, CENTER, RIGHT, LEADING, TRAILING 변수 사용 가능. 수직 방면은 TOP, CENTER, BOTTOM 변수 사용 가능. 버튼 텍스트 위치를 아이콘에 상대적으로 결정하는 메소드들. int getHorizontalTextPosition() void setHorizontalTextPosition(int textPosition) int getVerticalTextPosition() void setVerticalTextPosition(int textPosition)
8.2 스윙 컴포넌트 버튼의 상태에 따라 아이콘이 변경되도록 설정하는 메소드들. void setDisabledIcon(Icon disabledIcon) - 비 활성화된 상태에 보여질 아이콘을 설정. void setPressedIcon(Icon pressedIcon) - 버튼이 눌려졌을 때 보여질 아이콘을 설정한다. void setRolloverIcon(Icon rolloverIcon) - 버튼 위에 마우스가 놓여졌을 때 보여질 아이콘을 설정한다. void setDisabledSelectedIcon(Icon disabledSelectedIcon) - 버튼이 눌려진 상태에서 비 활성화된 상태에서 보여질 아이콘을 설정한다. 키보드를 이용해서 단축키(mnemonic)를 설정하는 메소드 void setMnemonic(char mnemonic) - 단축키 문자를 설정.
8.2 스윙 컴포넌트 3. JButton JButton 컴포넌트는 AbstractButton 클래스로부터 상속 AbstractButton 클래스로부터 상속받은 클래스는 JButton 이외에 JCheckBox, JRadioButton, JMenuItem, JMenu, JToggleButton 등이 있다. 생성자 JButton() JButton(Icon icon) JButton(java.lang.String text) JButton(java.lang.String text, Icon icon) JButton의 대부분 메소드들은 AbstractButton 클래스에 정의된 것들이다.
8.2 스윙 컴포넌트 예제: JLabelButton.java 14 ImageIcon logo = new ImageIcon("logo.gif"); 15 label=new JLabel("대학교 로고", logo, JLabel.RIGHT); 16 label.setFont(new Font("굴림체", Font.PLAIN, 20)); 17 getContentPane().add(label); 18 19 textB = new JButton("버튼" ); 20 textB.setFont(new Font("굴림체", Font.BOLD, 20)); 21 getContentPane().add(textB); 22 23 ImageIcon project = new ImageIcon("chart.gif"); 24 iconB = new JButton("", project); 25 getContentPane().add(iconB); 26 setDefaultCloseOperation(EXIT_ON_CLOSE); ......
8.2 스윙 컴포넌트 Swing 1.1 버전 이후에는 JLabel이나 JButton에서 HTML 태그를 사용가능, HTML을 사용할 때는 처음에 <html> 태그를 먼저 기술한다. 예제: HtmlButton.java 1 import java.awt.*; 2 import javax.swing.*; 3 4 public class HtmlButton extends JFrame { 5 JButton mline, rollover; 6 ImageIcon on, off; 7 8 public HtmlButton() { 9 super("HTML 태그를 갖는 버튼"); 10 getContentPane().setLayout(new FlowLayout()); 11 mline = new JButton("<html><font color=red>버튼 제목" + 12 "</font><hr>이름</html>");
8.2 스윙 컴포넌트 4. 툴팁(tooltip) 스윙 컴포넌트에 "Tip"을 화면에 보여주기 위해서 JToolTip 컴포넌트가 사용 JToolTip은 생성자를 이용해서 생성할 수도 있지만 보통은 JComponent 클래스에서 제공하는 setToolTipText(String text) 메소드를 이용 JButton chart = new JButton("Chart"); chart.setToolTipText("PIE chart"); 툴팁의 내용은 “<html>"로 시작하는 경우에 간단한 HTML 태그들을 사용할 수 있다. rollover.setToolTipText("<html><b>안녕</b><br>!!!</html>");
8.2 스윙 컴포넌트 5. 보더 (Border) 스윙 컴포넌트 주위에 다양한 형태의 보더를 만들어줄 수 있다. 스윙에서 보더는 javax.swing.border 패키지에 들어있다. JComponent 클래스에는 보더를 설정할 수 있는 setBorder() 메소드를 정의하고 있기 때문에 모든 스윙 컴포넌트들은 보더를 사용할 수 있다. 보더 클래스 BevelBorder - 3D 형태의 양각/음각의 보더 CompoundBorder -2개의 보더가 네스팅(nesting)되서 하나의 보더를 형성한다. EmptyBorder - 보더 자리는 차지하지만 보이지 않는 투명한 보더 EtchedBorder - 홈 형태의 보더 LineBorder - 선 모양의 보더 MatteBorder - 색이나 아이콘을 사용하는 보더 SoftBevelBorder - 모서리가 둥근 형태의 BevelBorder TitledBorder - 텍스트가 있는 보더
8.2 스윙 컴포넌트 예제: WithBorder.java 16 label.setBorder(new EtchedBorder()); 20 textB = new JButton("버튼" ); 21 textB.setFont(new Font("굴림체", Font.BOLD, 20)); 22 textB.setBorder(new BevelBorder(BevelBorder.LOWERED)); 23 textB.setToolTipText("<html><h3>텍스트 버튼</h3>" + 24 "<font color=red><li>간단<li>편리</font></html>"); 25 getContentPane().add(textB); 26 27 ImageIcon project = new ImageIcon("chart.gif"); 28 iconB = new JButton("", project); 29 iconB.setBorder(new BevelBorder(BevelBorder.RAISED)); 30 iconB.setToolTipText("<html><table border=1><tr>" + 31 "<td>HTML</td></tr><tr><td>내용</td></tr></table></html>"); 32 getContentPane().add(iconB);
8.2 스윙 컴포넌트 8.2.4 JApplet 스윙에서 애플릿은 JApplet 클래스로부터 상속 JApplet는 디폴트로 보더 레이아웃을 사용하는 것 외에 Applet와 유사 주의할 점은 아이콘을 얻어오기 위해서는 URL을 이용해야 한다 예제: WithBorderApplet.java 1 import java.awt.*; 2 import javax.swing.*; 3 import javax.swing.border.*; 4 5 public class WithBorderApplet extends JApplet { 6 JButton textB, iconB; 7 JLabel label; 9 public void init() { 10 getContentPane().setLayout(new FlowLayout());
8.2 스윙 컴포넌트 8.2.5 JCheckBox, JRadioButton, JToggleButton 1. JCheckBox AWT의 체크박스와 유사. 스윙에서는 라디오버튼을 위해서 JRadioButton 클래스를 따로 정의 생성자 JCheckBox(Icon icon) JCheckBox(Icon icon, boolean selected) JCheckBox(String text) JCheckBox(String text, boolean selected) JCheckBox(String text, Icon icon) JCheckBox(String text, Icon icon, boolean selected) selected 부분은 체크박스가 초기에 선택되어질 것인가 여부를 기술하는 부울린(boolean) 값이다.
8.2 스윙 컴포넌트 체크박스도 JButton 클래스와 마찬가지로 AbstractButton 클래스로부터 상속. 체크박스는 디폴트 아이콘 이미지를 갖는데 다음 메소드들 이용하여 프로그래머가 아이콘을 지정할 수도 있다. void setIcon(Icon defaultIcon) void setSelectedIcon(Icon selectedIcon) 체크박스의 상태를 알아보거나 상태를 설정하는 메소드 boolean isSelected() void setSelected(boolean b) 이외의 메소드들은 JButton 클래스에서 설명한 내용과 동일하다.
8.2 스윙 컴포넌트 2. JRadioButton CheckboxGroup과 유사하게 ButtonGroup 클래스를 두어서 라디오버튼들을 하나의 그룹으로 설정할 수 있도록 하였다. 생성자 JRadioButton(Icon icon) JRadioButton(Icon icon, boolean selected) JRadioButton(String text) JRadioButton(String text, boolean selected) JRadioButton(String text, Icon icon) JRadioButton(String text, Icon icon, boolean selected) 라디오 버튼도 AbstractButton 클래스로부터 상속받았기 때문에 AbstractButton의 메소드를 사용한다.
8.2 스윙 컴포넌트 3. JToggleButton JToggleButton은 자바 AWT에서는 지원되지 않는 클래스로서 JCheckBox와 JRadio Button의 부모 클래스이다. JToggleButton은 On/Off 상태를 가지면서, 처음에 버튼을 누르면 눌려진 상태를 유지한다. 생성자 JToggleButton() JToggleButton(Icon icon) JToggleButton(Icon icon, boolean selected) JToggleButton(String text) JToggleButton(String text, boolean selected) JToggleButton(String text, Icon icon) JToggleButton(String text, Icon icon, boolean selected)
8.2 스윙 컴포넌트 예제: BoxesTest.java ...... 11 getContentPane().setLayout(new GridLayout(0, 3)); 12 joy = new JCheckBox("Joy Stick", true); 13 key = new JCheckBox("Keybord", false); 14 mouse = new JCheckBox("Mouse", false); 15 16 ButtonGroup bg = new ButtonGroup(); 17 single = new JRadioButton("Single", true); 18 married = new JRadioButton("Married", false); 19 divorced = new JRadioButton("Divorced", false); 20 bg.add(single); 21 bg.add(married); 22 bg.add(divorced); 24 onoff = new JToggleButton("On/Off");
8.2 스윙 컴포넌트 8.2.6 JList 와 JComboBox 1. JList와 DefaultListModel JList는 AWT의 List 클래스와 유사 JList는 자동적으로 스크롤바를 만들어주지 않는다. 리스트에 스크롤 기능을 추가하기 위해서는 JScrollPane 클래스를 이용해야 한다. JList list = new JList(stringArray); ScrollPane pane = new ScrollPane(); pane.add (list); 생성자 JList(ListModel dataModel) JList(Object[] listData) JList(Vector listData) JList()
8.2 스윙 컴포넌트 선택된 아이템을 얻어올 수 있는 메소드 ListModel int getSelectedIndex() int[] getSelectedIndices() Object getSelectedValue() Object[] getSelectedValues() ListModel JList 에 추가 삭제 하기 위해 ListModel 인터페이스를 이용 ListModel dm = (ListModel) list.getModel(); 원소를 추가하기 위한 메소드들 void add(int index, Object element) - element를 index 위치에 삽입한다. void addElement(Object obj) - obj를 리스트의 끝 부분에 추가한다.
8.2 스윙 컴포넌트 DefaultListModel ListModel 인터페이스를 임플리멘츠함. 주어진 위치의 원소를 얻어오는 메소드들 Object get(int index) - index번째의 원소를 얻어온다. Object getElementAt(int index) - index번째의 원소를 얻어온다. Object elementAt(int index) - index번째의 원소를 얻어온다. 원소를 삭제하기 위한 메소드들 Object remove(int index) - index번째의 원소를 삭제한다. void removeAllElements() - 모든 원소를 삭제한다. boolean removeElement(Object obj) - 주어진 원소를 삭제한다. 기타 메소드들 int size() - 원소의 수를 얻어온다. boolean contains(Object elem) - elem이 컴포넌트에 포함되어 있는지 알아본다. Enumeration elements() - 원소 리스트들을 Enumeration 타입을 리턴한다.
8.2 스윙 컴포넌트 2. JComboBox 와 DefaultComboBoxModel 콤보박스는 자바 AWT의 Choice와 유사하다. 생성자 JComboBox(ComboBoxModel aModel) JComboBox(Object[] items) JComboBox(Vector items) JComboBox()
8.2 스윙 컴포넌트 콤보박스에 아이템을 추가하기 위한 메소드 특정 위치에 있는 아이템을 얻어오기 위한 메소드 void addItem(Object anObject) 특정 위치에 있는 아이템을 얻어오기 위한 메소드 Object getItemAt(int index) 아이템의 개수를 얻어오기 위한 메소드 int getItemCount() 현재 콤보박스에서 선택된 아이템의 인덱스나 아이템을 얻어오기 위한 메소드 int getSelectedIndex() Object getSelectedItem()
8.2 스윙 컴포넌트 아이템을 특정 위치에 삽입하기 위한 메소드 콤보박스에 있는 아이템을 삭제하기 위해서는 다음 메소드 void insertItemAt(Object anObject, int index) 콤보박스에 있는 아이템을 삭제하기 위해서는 다음 메소드 void removeAllItems() 모든 아이템을 삭제 void removeItemAt(int anIndex) 특정 위치의 아이템만 삭제 콤보 박스 모델(ComboBoxModel) 콤보 박스에서 사용되는 모델은 ComboBoxModel 인터페이스임. 콤보 박스 모델을 얻기 위해한 예: ComboBoxModel dm = (ComboBoxModel) combo.getModel();
8.2 스윙 컴포넌트 ComboBoxModel이 제공하는 데이터 저장 및 접근하는 메소드들. 콤보 박스에 아이템을 추가 또는 삭제하기 위한 메소드들 void addElement(Object anObject) - 아이템을 추가한다. void insertElementAt(Object anObject, int index) - index번째에 anObject 객체를 삽입한다. void removeAllElements() - 모든 아이템들을 삭제한다. void removeElement(Object anObject) - anObject 아이템을 삭제한다. void removeElementAt(int index) - index번째의 아이템을 삭제한다. 아이템을 찾는 메소드들 Object getElementAt(int index) - index번째의 아이템을 리턴한다. int getIndexOf(Object anObject) - anObject 객체의 인덱스를 리턴한다. 선택된 아이템 얻는 메소드 Object getSelectedItem() - 선택된 아이템을 리턴한다. 원소의 개수를 알아보는 메소드 int getSize() - 원소의 수를 리턴한다.
8.2 스윙 컴포넌트 예제: JListComboBox.java 5 JList fruits; 6 JComboBox colors; 8 public JListComboBox() { 9 super("스윙 리스트와 콤보박스"); 10 getContentPane().setLayout(new FlowLayout()); 11 12 String items[] = {"apple", "orange", "banana", "pear"}; 13 fruits = new JList(items); 14 fruits.setVisibleRowCount(3); 15 JScrollPane sp = new JScrollPane(fruits); 16 17 colors = new JComboBox(); 18 colors.addItem("white"); 19 colors.addItem("blue"); 20 colors.addItem("green");
8.2 스윙 컴포넌트 8.2.7 텍스트 컴포넌트 1. JTextComponent 용도에 따라 텍스트 컨트롤, 단순 텍스트, 스타일을 가지는 텍스트 영역의 세 가지 종류로 구분. 텍스트 컨트롤은 한 줄을 입력할 수 있는 JTextField, JPasswordField 클래스들. 단순 텍스트 영역은 여러 줄을 입력하지만, 한 가지 폰트로 동일한 스타일의 문자열만 사용. JTextArea 클래스 스타일을 가지는 텍스트 영역은 여러 폰트를 사용해서 문자열들을 화면에 보여줄 수 있는 JEditorPane, JTextPane 클래스들. JTextComponent는 텍스트를 처리할 수 있는 기본적인 기능들 제공. Document 클래스는 텍스트에서 데이터를 가지고 있는 모델. 텍스트는 캐릿 모양을 변경할 수 있고, 텍스트를 처리하기에 필요한 기능들을 제공한다.
8.2 스윙 컴포넌트 스윙 텍스트 컴포넌트 상속 관계
8.2 스윙 컴포넌트 JTextComponent는 복사, 잘라내기, 붙이기를 위한 메소드들. void copy() - 현재 선택된 영역을 시스템 클립보드로 복사한다. void cut() - 현재 선택된 영역을 잘나내고, 시스템 클립보드로 옮긴다. void paste() - 시스템 클립보드에 있는 데이터를 텍스트 영역에 붙인다. 캐릿 형태를 알아보거나, 변경하기 위한 메소드들. Caret getCaret() - 현재 설정된 캐릿을 리턴한다. Color getCaretColor() - 캐릿의 색을 리턴한다. int getCaretPosition() - 캐릿의 위치를 리턴한다. void setCaret(Caret c) - 캐릿을 지정한다. void setCaretColor(Color c) - 캐릿의 색을 지정한다. void setCaretPosition(int position) - 캐릿의 위치를 지정한다.
8.2 스윙 컴포넌트 텍스트에서 선택된 부분을 알아보기 위한 메소드들. String getSelectedText() - 선택된 부분의 문자열을 리턴한다. Color getSelectedTextColor() - 선택된 부분의 글자색을 리턴한다. int getSelectionStart() - 선택된 부분의 처음 위치를 리턴한다. int getSelectionEnd() - 선택된 부분의 끝 위치를 리턴한다. void select(int selectionStart, int selectionEnd) - 지정된 영역을 선택한다. void selectAll() - 텍스트의 모든 데이터를 선택한다. void replaceSelection(String content) - 선택된 부분을 content로 변경한다.
8.2 스윙 컴포넌트 String getText() - 텍스트 컴포넌트에 있는 텍스트 데이터를 리턴한다. 텍스트 데이터를 얻거나 값을 설정하기 위한 메소드들. String getText() - 텍스트 컴포넌트에 있는 텍스트 데이터를 리턴한다. String getText(int offs, int len) - off만큼 떨어진 곳에서 len 길이의 텍스트 데이터를 리턴한다. void setText(String t) - 문자열 t를 텍스트 데이터로 설정한다. void setEditable(boolean b) - 사용자가 편집할 수 있도록(true)/하지 못하도록(false) 설정한다. 2. JTextField JTextField는 TextField처럼 한 줄의 문자열을 입력할 수 있는 클래스. 생성자 JTextField() JTextField(String text) JTextField(int columns) JTextField(String text, int columns) JTextField(Document doc, String text, int columns)
8.2 스윙 컴포넌트 3. JPasswordField JPasswordField 클래스는 텍스트 내용을 화면에 '*'로 표시하는 JTextField 클래스의 일종이다. 생성자 JPasswordField() JPasswordField(String text) JPasswordField(int columns) JPasswordField(String text, int columns) JPasswordField(Document doc, String txt, int columns) 화면에 나타나는 문자를 지정하거나 알아볼 수 있는 메소드들. void setEchoChar(char c) - 화면에 보여줄 문자를 지정. char getEchoChar() - 현재 화면에 보여지는 문자를 알아봄.
8.2 스윙 컴포넌트 4. JTextArea JTextArea와 JTextField는 JTextComponent 클래스로부터 상속받는데, JText Component 클래스는 편집기에서 사용되는 기본적인 기능들을 제공하고 있다. 생성자 JTextArea() JTextArea(java.lang.String text) JTextArea(int rows, int columns) JTextArea(String text, int rows, int columns) JTextArea(Document doc) JTextArea(Document doc, String text, int rows, int columns)
8.2 스윙 컴포넌트 JTextArea가지는 메소드들. - start와 end 사이의 문자열을 str 문자열로 변경. void append(String str) - 문자열을 끝에 추가. int getLineCount() - 줄 수를 리턴. void insert(String str, int pos) - 문자열을 pos 위치에 삽입. void replaceRange(String str, int start, int end) - start와 end 사이의 문자열을 str 문자열로 변경. void setTabSize(int size) - 탭문자의 크기를 지정.
8.2 스윙 컴포넌트 예제: SwingText.java 5 JTextField field; 6 JPasswordField passwd; 7 JTextArea area; ...... 13 area = new JTextArea(); 14 JScrollPane sp = new JScrollPane(area); 15 16 field = new JTextField(10); 17 passwd = new JPasswordField(10); 30 public Insets getInsets() { 31 return new Insets(30, 10, 10, 10); 32 }
8.2 스윙 컴포넌트 8.2.8 JTabbedPane JTabbedPane 클래스를 이용하면 여러 개의 컴포넌트(보통 JPanel)가 공간을 공유할 수 있다. 사용자는 탭을 선택함으로서 원하는 컴포넌트를 볼 수 있다. JTabbedPane 클래스는 사용자가 선택할 수 있는 탭이 있다는 것을 제외하면 AWT의 CardLayout과 유사하다고 볼 수 있다. 생성자 JTabbedPane() JTabbedPane(int tabPlacement) tabPlacement는 탭의 위치를 결정할 수 있는데, TOP, BOTTOM, LEFT, RIGHT 중에 하나를 값으로 가질 수 있다.
8.2 스윙 컴포넌트 JTabbedPane에 컴포넌트를 붙이기 위한 메소드 컴포넌트를 제거하기 위한 메소드들 void addTab(String title, Icon icon, Component component, String tip) void addTab(String title, Icon icon, Component component) void addTab(String title, Component component) void insertTab(String title, Icon icon, Component component, String tip, int index) 컴포넌트를 제거하기 위한 메소드들 void remove(Component component) void removeAll() void removeTabAt(int index) JTabbedPane에 추가되는 컴포넌트들은 추가되는 순서에 따라 인덱스로 나타낼 수 있는데, 인덱스는 0부터 시작된다.
8.2 스윙 컴포넌트 그 외에 다른 메소드들 int getSelectedIndex() - 선택된 탭팬의 인덱스 값을 리턴한다. int getTabCount() - 탭의 수를 리턴한다. void setIconAt(int index, Icon icon) - index번째의 탭의 아이콘을 설정한다. Icon getIconAt(int index) - index번째 탭의 아아콘을 리턴한다. 예제 : TabPaneDemo.java 5 JTabbedPane tabpane; 6 7 public TabPaneDemo(){ 8 super("탭팬 테스트"); 9 tabpane = new JTabbedPane();
8.2 스윙 컴포넌트 11 JPanel one = new JPanel(); 12 JPanel two = new JPanel(); 13 JPanel three = new JPanel(); ...... 19 tabpane.addTab("One", one); 20 tabpane.addTab("Two", two); 21 tabpane.addTab("Three", three); 22 23 getContentPane().add(tabpane, BorderLayout.CENTER);
8.2 스윙 컴포넌트 8.2.9. JTable JTable은 테이블 형태의 자료를 보여주고 편집도 가능한 스윙 컴포넌트 생성자 JTable(TableModel dm) JTable(TableModel dm, TableColumnModel cm) JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) JTable(int numRows, int numColumns) JTable(Vector rowData, Vector columnNames) JTable(java.lang.Object[][] rowData, Object[] columnNames)
8.2 스윙 컴포넌트 DefaultTableModel TableModel 인터페이스를 구현한 클래스. 테이블에 행과 열을 추가하는 메소드들. void addColumn(Object columnName) - 열 이름을 이용해서 한 열을 추가. void addColumn(Object columnName, Object[] columnData) - 열 이름과 데이터를 이용해서 한 열을 추가한다. void addColumn(Object columnName, Vector columnData) void addRow(Object[] rowData) - 한 줄을 추가한다. void addRow(Vector rowData) - 한 줄을 추가한다.
8.2 스윙 컴포넌트 열의 수와 이름을 알아보는 메소드 주어진 행과 열의 값을 알아보고, 값을 설정하는 메소드 int getColumnCount() - 열의 수를 리턴한다. String getColumnName(int column) - 열의 이름을 리턴한다. 주어진 행과 열의 값을 알아보고, 값을 설정하는 메소드 Object getValueAt(int row, int column) - 테이블에서 주어진 행과 열에 해당되는 값을 리턴한다. void setValueAt(Object aValue, int row, int column)– 테이블에서 주어진 행과 열에 값을 설정한다. 행을 추가/삭제하기 위한 메소드들 void insertRow(int row, Object[] rowData) - row번째에 행을 추가한다. void insertRow(int row, Vector rowData) void removeRow(int row) - row번째 행을 제거한다.
8.2 스윙 컴포넌트 예제 : TableDemo.java 8 String fieldName[] = { 9 "<html>이름<br>학기순</html>", 10 "전화번호", 11 "E-Mail" 12 }; 14 String data[][] = { 15 { "최종명", "000-0000", "jmchoi@email"}, 16 { "박준서", "111-1111", "jspark@email"}, 17 { "홍길동", "222-2222", gdhong@email} 18 } ; 20 JTable table = new JTable(data, fieldName); 21 JScrollPane sp = new JScrollPane(table);
8.2 스윙 컴포넌트 8.2.10. 트리 (JTree) JTree는 계층적인 자료를 보여주기 위한 스윙 컴포넌트 트리는 하나의 루트 노드를 가지고 여러 개의 서브 노드들을 갖는다. 서브노드들 중에서 자식노드가 없는 노드를 리프(leaf) 노드라고한다. 리프 노드가 아닌 노드들은 숫자에 상관없이 여러 개의 자식 노드들을 가질 수 있고 마우스로 클릭하는 경우에 확장된다. 생성자 JTree() JTree(Object[] value) JTree(Vector value) JTree(Hashtable value) JTree(TreeNode root) JTree(TreeNode root, boolean asksAllowsChildren) JTree(TreeModel newModel)
8.2 스윙 컴포넌트 TreeModel TreeCellRenderer DefaultTreeModel javax.swing.tree패키지에 있는 인터페이스, 트리의 데이터 표현을 위해 사용하며 JTree의 각 노드를 관리. JTree의 각 노드는 toString() 메소드를 갖는 어떠한 객체도 사용될수 있음. TreeCellRenderer 트리의 노드 객체를 시각적으로 보여주는 클래스. TreeModel을 구현하는 클래스와 TreeCellRenderer 클래스를 정의함으 로서 다양한 형태의 트리를 만들 수 있음. DefaultTreeModel 트리의 노드로 TreeNode를 사용. TreeNode는 7개의 메소드를 갖는 인터페이스. 일반적으로 TreeNode를 구현한 DefaultMutableTreeNode 클래스를 이용 해서 트리노드를 만들어 사용.
8.2 스윙 컴포넌트 DefaultMutableTreeNode 클래스의 생성자 DefaultMutableTreeNode(Object userObject) DefaultMutableTreeNode(Object userObject, boolean allowsChildren) userObject를 사용하는 경우에는 트리 노드에 표현되는 값은 userObject의 toString() 메소드의 리턴 값이다. DefaultMutableTreeNode 클래스의 메소드들 void add(MutableTreeNode newChild) - newChild를 자식 노드로 붙임. Enumeration children() - 현재 노드의 자식 노드들을 리턴. TreeNode getChildAt(int index) - index번째의 자식 노드를 리턴. int getChildCount() - 자식 노드의 수를 리턴.
8.2 스윙 컴포넌트 DefaultMutableTreeNode 클래스의 메소드들 int getDepth() - 루트노드에서 현재 노드까지의 깊이를 리턴. TreeNode getParent() - 부모 노드를 리턴. TreeNode[] getPath() - 루트 노드에서 현재 노드까지의 패스를 리턴. TreeNode getRoot() - 루트 노드를 리턴. boolean isLeaf() - 단말 노드인지 알아봄. boolean isRoot() - 루트 노드인지 알아봄. void remove(int childIndex) - childIndex번째의 자식 노드를 삭제. void remove(MutableTreeNode aChild) - 자식 노드를 삭제. void removeAllChildren() - 모든 자식 노드를 삭제. void setUserObject(Object userObject)-노드의 값으로 사용되는 userObject 를 설정.
8.2 스윙 컴포넌트 예제 : TreeDemo.java 9 DefaultMutableTreeNode jcomponent = 10 new DefaultMutableTreeNode("JComponent"); 11 12 DefaultMutableTreeNode jpanel = 13 new DefaultMutableTreeNode("JPanel"); 14 DefaultMutableTreeNode jtextcomponent = 15 new DefaultMutableTreeNode("JTextComponent"); ...... 19 jcomponent.add(jpanel); 20 jcomponent.add(jtextcomponent); 31 JTree tree = new JTree(jcomponent); 32 JScrollPane sp = new JScrollPane(tree);
8.2 스윙 컴포넌트 8.2.12 JInternalFrame 프레임을 아이콘화 하는 특징을 내부 프레임에 부가하기 위해서 Desktop 클래스를 내부 프레임과 같이 사용한다. 내부 프레임의 생성자 JInternalFrame() JInternalFrame(String title) JInternalFrame(String title, boolean resizable) JInternalFrame(String title, boolean resizable, boolean closable) JInternalFrame(String title, boolean resizable, boolean closable, boolean maximizable) JInternalFrame(String title, boolean resizable, boolean closable, boolean maximizable, boolean iconifiable) Desktop를 위해서 JDesktopPane 클래스를 제공. JDesktopPane 클래스에 내부 프레임을 붙임으로서 내부 프레임이 일반 프레임처럼 작동.
8.2 스윙 컴포넌트 예제 : InterFrameDemo.java 5 JDesktopPane desktop; 6 JInternalFrame inframe; 11 desktop = new JDesktopPane(); 12 inframe = new 13 JInternalFrame("내부프레임", true, true, true, true); 14 15 ok = new JButton("OK"); 16 inframe.getContentPane().add(ok, BorderLayout.SOUTH); 17 18 inframe.setSize(200,100); 19 inframe.setVisible(true); 20 desktop.add(inframe); 21 getContentPane().add(desktop, BorderLayout.CENTER);