자바(Java)의 기초 박살내기 - Java GUI②


이번 시간에는 앞선 시간에 이어서 자바 GUI를 배우겠습니다.


 1. Swing의 컨테이너 (JFrame) 


더블클릭을 하시면 이미지를 수정할 수 있습니다


- import로 java.awt.* 사용합니다.


- 구현된 인터페이스 

- ImageObserver 

- MenuContainer

- Serializable

- Accessible

- RootPaneContainer

- WindowConstants


- 생성자

- JFrame() : 타이틀이 없는 프레임을 생성

- JFrame(String title) : 타이틀이 있는 프레임 생성


- 구성

- JRootPane : 실직적인 윈도우 기능을 수행하는 경량의 컨테이너

- glassPane과 layerPane으로 구성

- layerPanem은 JMenuBar와 contenPane을 포함

- layerPane : 루트 페인에 대해 레이어를 할 수 있도록 여러 층의 패널을 포함 할 수 있는 패널로 윗 부분은 menuBar와 아래 부분은 contentPane으로 구성

- glassPane : 기본적으로 숨겨진 상태로 되어 있으며 다른 패널 위에 존재하는 패널

- 마우스 이벤트를 처리하기 위해 가장 먼저 루트 페인에 추가된다.

- contentPane : 일반적인 컴포넌트들을 가질 수 있는 패널

- 프레임 객체의 getContentPane()메소드를 이용해서 얻을 수 있다.

- menuBar : 윈도우의 메뉴를 제공하는 역할로 생략이 가능한 선택항목

- JMenu, JmenuItem 등을 이용해서 메뉴를 구성하여 setJMenuBar()메소드를 이용해서 등록 할 수 있다.


- 메소드

 MenuBar getMenuBar()

 프레임의 메뉴바를 리턴 

 int getState()

 프레임의 상태를 리턴 

 String getTitle()

 타이틀 바의 문자열을 리턴 

 void remove(MenuComponent m)

 프레임에서 지정한 메뉴를 제거 

 void setResizable(Boolean resizeable)

 프레임의 크기를 사용자가 변할 수 있게 지정 

 void setsize(int width, int height)

 사이즈를 'width' 및 'height'로변경

 pack()

 컨테이너의 크기를 구성 요소 들의 크기로 설정 

 void setVisible(boolean b)

 'b'에 의해 컴퍼넌트 표시 or 비표시 설정

 void setLocation(int x, int y)

 이 컴퍼넌트를 새로운 위치로 이동 

 setBounds(int x, int y, int width, int height)

 위치, 너비, 높이 지정 

 getContentPane()

 프레임의 contentPane 오브젝트를 돌려줍니다. 

 setIconImage(Image image)

 프레임의 최소화된 아이콘에 표시되는 이미지를 설정 

 add(컴포넌트)

 컴포넌트를 부착 


- 기본적으로 타이틀, 최소버튼, 최대버튼, 종료버튼이 지원


- 기본적으로 화면에 안보이게 설정했기 때문에 반드시 setVisible(true)값으로 설정해야 화면상에 보여짐


- 만드는 방법은 JFrame 객체를 직접생성 or JFrame으로부터 상속 받는다.


- 종료 이벤트 처리는 setDefaultCloseOperation(EXIT_ON_CLOSE)을 호출한다.


<JFrame 상속 예제 소스코드 - JFrameTest.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import javax.swing.JFrame;
 
public class JFrameTest extends JFrame
{
    // JFrmae 타이틀 없는 생성자
    public JFrameTest()
    {
        super("J프레임 테스트");
        // 크기 지정
        setSize(350,100);
        // 창을 보이게함
        setVisible(true);
    }
    
    public static void main(String[] args) 
    {
        JFrameTest  f = new JFrameTest();
        // 종료 이벤트 
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
 
}
 
cs


<결과>


- JPanel

- 컴포넌트들을 그룹 별로 묶어서 처리할 때 사용하는 컨테이너

- 일반적으로 Frame에 컴포넌트들을 직접 붙이지 않고 Panel 이용

- 생성자

 JPanel()

 디폴트의 레이아웃 사용해 새로운 Panel 생성 

 JPanel(LayoutManager layout)

 지정된 레이아웃 매니저를 이용하여 새로운 Panel 생성 

JPanel(boolean isDoubleBuffered) 

 지정된 버퍼를 이용해 새로운 Panel 생성


- JScrollPane

- 스크롤을 이용해서 컴포넌트들을 보여주는 컴포넌트

- 스크롤을 이용해서 보여주는 화면을 상하좌우로 이동하여 포함된 컴포넌트의 원래크기 유지

- JList, JTextArea, JTextPane 등이용




2. Swing의 컴포넌트 


- 윈도우를 구성하는 작은 부품


- 컨테이너의 add를 통해 부착


- Border : 경계선


- AbstractBorder : 최상위 추상 클래스


- Border 객체를 생성한 후 컴포넌트의 setBorder()를 이용해서 설정


- setTooltipText(일반 텍스트 또는 html코드)를 이용해서 툴 팁 작성 가능


- JLabel

- 컴포넌트에 텍스트와 이미지를 모두 넣을 수 있습니다.

- getText와 setText(String str)을 이용해서 텍스트 설정


- AbstractButton

- JButton, JToggleButton, JRadioButton 등의 모든 버튼의 종류를 추상화한 클래스

- 버튼에 텍스트와 이미즈를 모두 넣을 수 있고 다양한 샅애에서 보여줄 버튼의 이미지를 각각 지정 하여 Roll-Over 버튼을 만들 수도 있습니다.

- JButton(Icon icon), JButton(String text, Icon icon)


- JToggleButton

- 버튼의 상태를 기본과 선택된 상태 두가지를 가지는 버튼으로 선택된 상태를 계속유지

- 기본상태와 선택된 상태를 구분하기위해 서로다른 아이콘 지정 사용가능


- JRadioButton

- AWT의 Checkbox 클래스를 이용한 라디오 형 체크박스와 유사한 형태의 컴포넌트

- 여러 항목 중에서 하나의 항목만 선택할 수 있도록 만든 컴포넌트


<JButton 예제 소스코드 - JButtonTest.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JToggleButton;
 
public class JButtonTest extends JFrame
{
    public JButtonTest()
    {
        super("버튼 테스트");
        // 버튼을 넣기위한 패널 생성
        JPanel buttonPanel = new JPanel();
        // 'Button'이름을 가진 버튼 생성
        JButton btn = new JButton("Button");
        // 버튼 넣기
        buttonPanel.add(btn);
        
        // 버튼안에 이미지 넣기
        ImageIcon icon1 = new ImageIcon(".\\src\\red.png");
        ImageIcon icon2 = new ImageIcon(".\\src\\black.png");
        JToggleButton tgbutton = new JToggleButton(icon1);
        buttonPanel.add(tgbutton);
 
        // '취미'레이블
        JLabel lblHobby = new JLabel("취미");
        // 체크박스
        JCheckBox check1 = new JCheckBox("운동");
        JCheckBox check2 = new JCheckBox("독서");
        JCheckBox check3 = new JCheckBox("영화감상");
        buttonPanel.add(lblHobby);
        buttonPanel.add(check1);
        buttonPanel.add(check2);
        buttonPanel.add(check3);
        
        // '성별'레이블
        JLabel lblMale = new JLabel("성별");
        // 
        JRadioButton rb1 = new JRadioButton("남자");
        JRadioButton rb2 = new JRadioButton("여자");
        ButtonGroup bg = new ButtonGroup();
        bg.add(rb1);
        bg.add(rb2);
        buttonPanel.add(lblMale);
        buttonPanel.add(rb1);
        buttonPanel.add(rb2);
        
        add(buttonPanel);
        
        setLocation(150,200);
        setSize(242,150);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    public static void main(String[] args)
    {
        new JButtonTest();        
    }
 
}
 
cs

<결과>



- JTextField

- 생성자

- JTextField()
- JTextField(int cols) : 지정된 열의 수를 갖는 텍스트 필드 생성
- JTextField(String text) : 지정된 텍스트로 초기화 한 텍스트 필드
- JTextField(String text int cols)
  - 메소드
- int getCarePosition() : 텍스트 내에서 현재 마우스 포인터의 위치를 리턴
- String getText() : 텍스트 내의 표시되는 텍스트를 리턴
- void select(int selection, int selectionEnd) : 시작위치부터 마지막 위치까지 선택
- void selectAll() : 텍스트 컴퍼넌트 내의 모든 텍스트를 선택 

- void setBackground(Color c) : 백그라운드 칼라를 설정

- void setCaretPosition(int pos) : caret의 위치를 설정 

- void setText(String t) : 표시되는 텍스트를 지정된 텍스트로 설정


- JTextArea
- 여러 줄을 입력할 수 있는 컴포넌트로 자체적으로 스크롤이 처리되지 않으므로 JscrollPane에 포함시켜 스크롤 지원합니다.
- 생성자
- JTextArea()
- JTextArea(int rows, int cols)
- JTextArea(String text)
- JTextArea(String text, int rows, int cols)
- 줄 바꿈 자동으로 해주지 않음 (옵션 사용)
- setWrapStyleWord()

<JText 예제 소스코드 - JTextTest.class>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import javax.swing.*;
import java.awt.*;
import javax.swing.border.*;
 
 
public class JTextTest extends JFrame
{
    JLabel lbl,la1,la2,la3;
    JTextField id;
    JPasswordField passwd;
    JPanel idPanel,paPanel,loginPanel;
    JButton b1,b2;
    JTextArea content;
 
    public JTextTest()
    {
          super"JText테스트" );
          // FlowLayout사용
          setLayout( new FlowLayout() );
          // Border로 영역 생성
          EtchedBorder eborder =  new EtchedBorder();
          // 레이블 생성     
          lbl = new JLabel( "아이디와 패스워드를 입력해 주세요" );
          // 레이블에 영역 만들기
          lbl.setBorder(eborder);
          // 레이블 추가
          add( lbl );
          // id패널과 pw 패널생성
          idPanel = new JPanel();
          paPanel = new JPanel();
          la3 = new JLabel("아이디");
          la2 = new JLabel("패스워드");
          // id텍스트필드와 pw텍스트 필드 선언
          id = new JTextField(10);
          passwd = new JPasswordField(10);
          idPanel.add(la3);
          idPanel.add(id);
          paPanel.add( la2 );
          paPanel.add( passwd );
          // 로그인과 회원가입을 위한 패널 생성
          loginPanel = new JPanel();
          b1 = new JButton("로그인");
          b2 = new JButton("회원가입");
          loginPanel.add( b1 );
          loginPanel.add( b2 );
          add(idPanel);
          add(paPanel);
          add(loginPanel);
          // 3행 20열 영역의 텍스트에어리어 
          content = new JTextArea(3,20);
          JScrollPane s= new JScrollPane(content);
          add(s);
          setSize( 250350 );
          setVisible(true);
          setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    public static void main( String args[] )
       { 
        new JTextTest();
       }
 
    
}
 
cs

<결과>


- JComboBox

<생성자>

 JComboBox(ComboBoxModel m)

 지정한 콤보박스 모델을 사용하는 콤보박스 객체 생성 

 JComboBox(Object[] items) 

 지정한 배열의 자료를 보여주는 콤보박스 객체 생성 

 JComboBox(Vector items)

 지정한 백테의 자료를 보여주는 콤보박스 객체 생성 

 

<메소드>

 void addActionListener(Action a)

 콤보박스에서 아이템을 선택했을 때 발생하는 이벤트를 받기위해 지정된 리스너 추가 

void addItemListener(ItemListener a)

 콤보박스에서 아이템의 선택이 바꿨을 때 발생하는 이벤트를 받기 위해 지정된 리스터 추가 

 void showPopup()

 팝업 윈도우를 보이게 한다. 

 Object getItemAt(int index)

 지정한 인덱스의 아이템을 얻어온다. 

 void addItem(Object o)

 지정한 아이템을 목록에 추가한다. 

 void insertItemAt(Object o, int index)

 지정한 아이템을 지정한 인덱스 위치에 추가 

void removeAllItems()

 모든 아이템을 제거한다. 

void removeItem(Object o)

 지정된 아이템을 목록에서 제거한다. 

void removeItemAt(int index)

 지정된 인덱스의 아이템을 목록에서 제거한다. 

void setEditable(Boolean flag)

 콤보박스의 편집 가능 상태를 지정한다. 


- JList

<생성자>

JList(ListModel m) 

 지정한 리스트 모델을 사용하는 리스트 객체 생성

JList(Object[] listData) 

 지정한 배열의 자료를 보여주는 리스트 객체 생성 

JList(Vector listData) 

 지정한 벡터의 자료를 보여주는 리스트 객체 생성 


<메소드>

void addListSelectionListener

(ListSelection listener)

 리스트에서 선택하는 항목이 바뀌었을 때 발생하는 이벤트를 받기 리스너 추가

 void ensureIndexisVisible(int index)

 지정한 인덱스의 아이템이 보여지도록 리스트 스크롤 시킨다.

void setSelectionBackground

(Color selectionBackground)

 선택된 아이템의 배경색을 지정한다.

void setSelectionForeground

(Color selectionForeground)

 선택된 아이템의 전경색을 지정한다. 

void setSelectionModel

(ListSelectionModel selectionModel)

 지정된 ListenerModel로 지정한다. 

 boolean isSelectionEmpty()

 선택된 아이템이 있는지 검사하여 있으면true, 없으면 false

int getSelectedIndex() 

 선택된 첫 번째 아이템으 인덱스를 얻어온다. 

int[] getSelectedIndices() 

 선택된 모든 아이템의 인덱스를 배열로 얻어온다. 

 Object getSelectedValue()

 선택된 아이템을 얻어온다. 

 Obgect[] getSelectedValues()

 선택된 모든 아이템을 배열로 얻어온다. 

 void setSelectedIndex(int index)

 지정된 인덱스의 아이템을 선택된 상태로 만든다. 

 void setSelectedValue(Object o, boolean shouldScroll)

 지정된객체를 가진 아이템을 선택된 상태로 만들고 shouldScroll이 true면 그 아이템이 보이도록 스크롤 한다. 

 void setModel(ListModel m)

 지정된 모델로 리스트의 모델을 지정한다.

 void setListData(Object[] listData)

 지정된 배열 자료를 사용하는 모델을 만들고 지정한다. 

 void setListData(Vector listData)

 지정된 백터 자료를 사용하는 모댈을 만들고 지정한다. 


<ComboBox 예제 소스코드 - ComboTest.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
 
public class ComboList extends JFrame
{
    JPanel p, p1, p2;
    // JList 선언
    JList<String> jl;
    // ComboBox 선언
    JComboBox<String> com;
    String name[] = { "너구리""돼지""족제비 ""봉이""말" };
    String count[] = { "1""2""3""4""5" };
 
    public ComboList() 
    {
        super("JComponent연습");
        Container c = getContentPane();
        // FlowLayout 생성
        c.setLayout(new FlowLayout());
        // JPanel 생성
        p = new JPanel(new GridLayout(12));
        // JComboBox에 name 배열 널기
        com = new JComboBox<String>(name);
        JScrollPane s = new JScrollPane(com);
        c.add(s);
        // JList에 count배
        jl = new JList<String>(count);
        JScrollPane s1 = new JScrollPane(jl);
        jl.setVisibleRowCount(4);
        c.add(s1);
        setSize(250300);
        setVisible(true);
    }
    
    public static void main(String args[]) 
    {
        ComboList Obj = new ComboList();
        Obj.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
 
 
}
 
cs


<결과>



- BoxLayout

- Swing에 추가된 Layout

- Box : 컴포넌트들을 왼쪽에서 오른쪽으로 수평배치되거나 위에서 아래로 수직배치 해 주는 객체

- 생성

- Box.createVerticalBox() : 수평으로 컴포넌트 추가

- Box.createHorizontalBox() : 수직으로 컴포넌트 추가

- Box.createVerticalStrut(int width)

Box.createHorizontalStrut(int width)


<BoxLayout  예제 소스코드 - BoxLayoutTest.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import javax.swing.*;
import java.awt.*
import javax.swing.border.*;
 
public class BoxLayoutTest extends JFrame 
{
    public BoxLayoutTest(){
        super"BoxLayout Test" );
        JRadioButton r1,r2;
        //박스 레이아웃 매니저를 생성하고 컨테이너에 설정
        setLayout(new BorderLayout());
        //수직 배치 박스 레이아웃을 생성
        Box left = Box.createVerticalBox();
        //보기 좋게 배치하기 위래 투명 컴포넌트로 공간 확보
        left.add(Box.createVerticalStrut(30)); 
        //라디오버튼을 위한 버튼 그룹 생성
        ButtonGroup radioGroup = new ButtonGroup();
        //버튼 객체를 생성 후 버튼 그룹에 추가
        radioGroup.add(r1 = new JRadioButton("치킨")); 
        //버튼 객체를 Box객체 left에 추가
        left.add(r1);                                  
        left.add(Box.createVerticalStrut(30));              
        radioGroup.add(r2 = new JRadioButton("피자"));
        left.add(r2);
        //Box객체 left를 패널에 추가
        JPanel leftPanel = new JPanel(new BorderLayout());
        //패널의 테두리선을 에칭효과로 지정
        leftPanel.setBorder(
           new TitledBorder( new EtchedBorder(),"음식"));       
        leftPanel.add(left, BorderLayout.CENTER);
 
        //수직으로 배치하는 박스레이아웃 생성
        Box right = Box.createVerticalBox();
        right.add(Box.createVerticalStrut(30));  
        //체크박스를 생성해 박스레이아웃에 추가
        right.add(new JCheckBox("너구리"));
        right.add(Box.createVerticalStrut(30));             
        right.add(new JCheckBox("돼지"));
        right.add(Box.createVerticalStrut(30));             
        right.add(new JCheckBox("족제비"));
        right.add(Box.createVerticalStrut(30));             
        right.add(new JCheckBox("봉이"));
        JPanel rightPanel = new JPanel(new BorderLayout());
        rightPanel.setBorder(
             new TitledBorder(new EtchedBorder(), "동물"));  
        rightPanel.add(right, BorderLayout.CENTER);
        
        //수평으로 배치하는 박스레이아웃을 생성해
        //패널leftPanel과 rightPanel을 이 박스 레이아웃에 배치
        Box center = Box.createHorizontalBox();
        center.add(leftPanel);
        center.add(rightPanel);
        add(center,  BorderLayout.CENTER);
        
        setSize(300,300);
        setVisible(true);
    }
    
    public static void main(String[] args) 
    {
        BoxLayoutTest box = new BoxLayoutTest();
        box.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}
cs


<결과>


- JTable

- 데이터를 행과 열로 구성되어 있는 테이블 형식으로 보여주는 컴포넌트

- JTable 역시 Scrollable 인터페이스가 구현되있음

- JTable을 사용하기 위해서는 먼저 데이터를 저장할 모델을 만들고 View인 JTable에 연결

<생성자>

 JTable()

 기본 자료 모델, 기본 컬럼 모델, 기본 선택 모델로 초기화된 테이블 객체 생성 

 JTable(int rows, int cols)

 DefaultTableModel을 이용해 빈 셀을 행과 열의 수만큼 테이블 객체 생성 

 JTable(Object[] rowData, Object colsName)

 2차원 배열에 값들을 보여주는 테이블 객체를 생성, 주어진 테이블 데이터와 컬럼의 이름을 가진다. 

 JTable(TableModel dm)

 주어진 dm을 가지는 자료 모델, 기본 컬럼 모델, 기본 선택 모델로 초기화된 테이블 객체를 생성

 JTable(TableModel dm, TableColumnModel cm)

 주어진 dm을 가지는 자료 모델, cm을 가지는 컬럼 모델, 기본 선택 모델로 초기화된 테이블 객체를 생성 

 JTable(TableModel dm, TableColumnModel cm, 

ListSelectionModel sm)

주어진 dm을 가지는 자료모델, cm 을가지는 컬럼 모델, sm을 가지는 선택 모델로 초기화된 테이블 객체 생성 

 JTable(Vector rowData, Vector colsName)

 주어진 벡터의 값들을 보여주는 테이블 객체 생성, 주어진 테이블 자료와 컬럼 이름을 가짐 


<메소드>

 void setModel(TableModel dataModel)

 주어진 자료 모델을 테이블 자료 모델로 지정

 void setColumnModel

(TableColumnModel columnModel)

 주어진 컬럼 모델울 테이블의 컬럼 모델로 지정

 setCellEditor(TableCellEditor anEditor)

 주어진 셀 자료를 테이블의 셀 에디터로 지정 

 void setValueAt(Object aValue, int row, 

int cols)

 테이블 모델의 셀에 주어진 행과 열의 위치에 자료를 설정한다.

 Object getValueAt(int row, int cols)

 주어진 행과 열 위치에 있는 셀값을 얻어옴 

 void setAutoResizeMode(int mode)

 컬럼의 자동 크기 조절 모드를 설정 

 void setIntercellSpacing

(Dimension intercellSpacing)

 셀 사이의 간격을 설정한다. 

 void setSelectionBackground

(Color selectionBackground)

 선택된 셀의 배경색을 설정한다.  

 void setSelectionForeground

(Color selectionForeground)

 선택된 셀의 전경색을 설정한다. 

void setShowHorizontalLines

(boolean showHorizontalLines)

 셀 사이의 수평 구분선을 그릴지 설정 

 void setShowVerticalLines

(boolean showVerticalLines)

 셀 사이의 수직 구분선을 그릴지 설정 

 void clearSelection()

 선택된 행과 열 셀을 지움 

 void selectAll()

 전체 테이블의 셀, 행과 열을 선택 

 void setCellselectionEnabled

(boolean cellSelectionEnabled)

 행과 열을 동시에 선택할 수 있도록 하는 선택모드를 사용할지를 설정한다.

 void setColumnSelectionAllowed

(boolean columnSelectionAllowed)

 테이블의 열을 동시에 선택할 수 있도록 하는 선택모드를 사용할지 설정 

 void setRowSelectionAllowed

(boolean rowSelectionAllowed)

 테이블의 행을 동시에 선택할 수 있도록 하는선택모드를 사용할지 설정 

 int getSelectedColumn()

 선택된 열의 첫번째 위치를 얻어온다. 선택된 열이 없으면 -1을 얻음 

 int[] getSelectedColums()

 선택된 열들을 배열 형태로 얻음

 int getSelectedRow()

 선택된행의 첫번째 위치를 얻어온다. 선택된 행이 없으면 -1

 int[] getSelectedRows()

 선택된 행들을 배열 형태로 얻어온다. 

 boolean isCellSelected(int row, 

int column)

 주어진 위치의 셀이 선택 상태인지를 얻음 

 int getColumnCount()

 열 수를 얻음 

 int getRowCount()

 행 수를 얻음 

 Object getValueAt(int rowIndex, 

int colsIndex)

 주어진 위치의 셀값을 얻음 

 void setValueAt(Object aValue,

int rowIndex, int colsIndex)

 주어진 위치의 셀값을 설정 



<JTable  예제 소스코드 - JTableTest.class>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.awt.*;
import javax.swing.*;
 
 
public class JTableTest extends JFrame
{
    public JTableTest()
    {
        super("JTable 테스트");
        String title[] = {"번호""이름""나이"};
        String data[][] = {
                {"1""너구리""26"},
                {"2""돼   지""25"},
                {"3""족제비""24"}
        };
        
        // JTable 행에는 데이터 열에는 타이틀 지정
        JTable table = new JTable(data, title);
        // JTable 스크롤 
        JScrollPane sp = new JScrollPane(table);
        // 테이블 위치
        getContentPane().add(sp, BorderLayout.CENTER);
        setSize(300150);
        setVisible(true);
    }
    
    public static void main(String args[])
    {
        JTableTest jtable = new JTableTest();
        jtable.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}
cs

<결과>


<DataModel  예제 소스코드 - DataModelTest.class>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import java.awt.*;
 
 
public class DataModelTest 
{
    public static void main(String args[])
    {
        // 데이터 값
        String rows[][] = { { "너구리""치킨" }, { "돼    지""피자" }, { "족제비""족발" } };
        // 항목 값
        String headers[] = { "이름""음식" };
        // 선택 할 수 있는 값(콤보 박스에 넣을 값)
        String sports[] = {"치킨""피자""족발","기타"};
        
        // 콤보박스 생성
        JComboBox<String> comboBox = new JComboBox<String>(sports);
        // 콤보박스 항목 최대 4개
        comboBox.setMaximumRowCount(4);
        
        // 테이블에 생성
        TableCellEditor editor = new DefaultCellEditor(comboBox);
 
        // JFrame을 상속받지 않고 코드상으로 사용하는 방법
        JFrame frame = new JFrame("JTable Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 테이블 생성
        JTable table = new JTable(new DefaultTableModel(rows, headers));
        
        // 테이블에 콤보박스  가능
        table.getColumnModel().getColumn(1).setCellEditor(editor);
 
        JScrollPane scrollPane = new JScrollPane(table);
        frame.add(scrollPane, BorderLayout.CENTER);
        frame.setSize(300150);
        frame.setVisible(true);
 
    }
}
cs


<결과>



- GUI 이벤트 처리는 3부에 설명하겠습니다~



  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유