버튼 컴포넌트를 묶을 때 사용.
묶여진 컴포넌트는 여러 개중 하나만 선택될 수 있다.
non-visual component
주로 JRadioButton에서 사용.
(체크박스는 여러개가 선택되어야하기 때문에 그룹으로 묶지 않는다.)
1. 묶여질 컴포넌트 생성.
JRadioButton jrb = new JRadioButton("라벨");
2. ButtonGroup 생성
ButtonGroup bg = new ButtonGroup();
3. 묶여질 컴포넌트를 추가
bg.add(컴포넌트);
프로그램에서 제공하는 기능들을 묶어서 사용자에게 보여줄 때 사용하는 컴포넌트.
MenuBar, Menu, MenuItem으로 구성.

1. MenuBar 생성
JMenuBar jmb = new JMenuBar();
2. Menu 생성
JMenu jm = new JMenu("라벨");
JMenu jmFile = new JMenu("파일");
JMenu jmEdit = new JMenu("편집");
3. MenuItem 생성
JMenuItem jmi = new JMenuItem("라벨");
JMenuItem jmiNew = new JMenuItem("새파일");
JMenuItem jmiUndo = new JMenuItem("취소");
4. Menu에 MenuItem 배치
* 메뉴객체명.add(메뉴아이템객체);
jmFile.add(jmiNew); //파일메뉴에 새파일 아이템 배치
jmEdit.add(jmiUndo);//편집메뉴에 취소 아이템 배치
5. MenuItem을 가진 Menu를 MenuBar에 배치
jmb.add(jmFile);
jmb.add(jmEdit);
6. JMenuBar를 JFrame에 설정
setJMenuBar( jmb );
컴포넌트들을 묶어서 보여줄 때 사용.
javax.swing.border 패키지에서 관련 클래스들을 제공.
javax.Component의 자식 클래스들은 모두 border를 가질 수 있다.
1. 컴포넌트 생성 - 주로 Container Component에 설정.
JButton jbtn = new JButton();
JPanel jp = new JPanel();
jp.add(jbtn); //컨테이너 컴포넌트에 여러 컴포넌트 배치.
2. Border 생성
TitledBorder tb = new TitledBorder("버튼을 클릭");
3. 컴포넌트에 설정
jp.setBorder(tb);
* Border 생성과 컴포넌트에 설정 한 줄에.
jp.setBorder(new TitledBorder("버튼을 클릭"));
* Border 예시
//보더에 라인그리기
jpLeft.setBorder(new LineBorder(Color.CYAN));
//보더에 제목 넣기
jpRight.setBorder(new TitledBorder("버튼을 클릭"));

JComboBox, JList, Jtable이 존재.
데이터 처리업무와 화면 처리 업무, 이벤트 처리업무를 분리하여 제공하는 Component.
M(Model) : 데이터를 가지고 관리하는 일. Default대상 Model.(DefaultComboBoxModel)
V(Viewer) : 데이터를 가지고 사용자에게 보여주는 일.(JComboBox)
C(Controller) : 이벤트 처리에 관련된 일.
장점 :
코드 복잡도가 낮아짐.
유지보수 편함.(프로그램의 생명력이 길어진다.)
단점 :
파일 개수가 많아진다. => 파일 관리 어렵.
값 넘기기와 에러처리가 어렵.
개발속도 느려짐.
S/W의 생명이 끝나는 때 => 더이상 유지보수가 안될 때.
(개발비용이 유지보수 비용보다 적을 때)
H/W => 고장나면,
DefaultComboBoxModel 클래스를 Model객체로 사용하는 View객체
1. Model 생성
DefaultComboBoxModel<E> dcbm = new DefaultComboBoxModel<E>();
- <E> 은 <String> 이나 <Integer> 등.
2. Model과 has a 관계로 View( JComboBox ) 생성
JComboBox<E> jbc = new JComboBox<E>( dcbm );
3. 데이터 추가 => Model객체 사용.
dcbm.addElement( 값 ); // dcbm에 값을 넣어야 JComboBox로 데이터가 들어감.
4. View에서 선택한 Element의 값 얻기
1) View에서 선택한 Element 번호 얻기
int index = jbc.getSelectedIndex();
2) Model에서 값 얻기
변수명 = dcbm.getElementAt( index );
5. View에서 선택된 값 삭제
1) View에서 선택한 index 얻기
int index = jbc.getSelectedIndex();
2) Model에서 삭제
dcbm.removeElementAt( index );
DefaultListModel 클래스를 Model객체로 사용하는 View객체
1. Model 생성
DefaultListModel<E> dlm = new DefaultListModel<E>();
- <E> 은 <String> 이나 <Integer> 등.
2. Model과 has a 관계로 View( JList ) 생성
JList<E> jl = new JList<E>( dlm );
3. 값 추가 => Model객체 사용.
dlm.addElement( 값 ); // dlm에 값을 넣어야 JList로 데이터가 들어감.
4. 리스트에서 선택한 index 값 얻기
1) 리스트에서 선택한 아이템의 index 얻기
int index = jl.getSelectedIndex();
2) Model에서 index의 값 얻기
변수명 = dlm.getElementAt( index );
//dlm.elementAt( index ); 도 가능. 똑같음.
5. 리스트에서 선택한 index 값 삭제
1) View에서 선택한 index 얻기
int index = jl.getSelectedIndex();
2) Model에서 삭제
dlm.removeElementAt( index );
DefaultTableModel 클래스를 Model객체로 사용하는 View객체.
ScrollBar가 없다.( ScrollBar 없이 배치되면 Colum)
1. Model 객체를 생성
String[] columnName = {"컬럼명",,,,};
String[][] data = {
{값,,,},
{값,,,}
};
DefaultTableModel dtm = new DefaultTableModel(data, columnName);
2. Model과 has a 관계로 View( JTable ) 생성
JTable jt = new JTable ( dtm );
3. 행 추가 => Model객체 사용.
String[] rowData = {값,,,,};
dtm.addRow( rowData ); //각 열에 방의 값이 할당된다.
4. 리스트에서 선택한 index 값 얻기
1) 리스트에서 선택한 아이템의 index 얻기
int index = jl.getSelectedIndex();
2) Model에서 index의 값 얻기
변수명 = dlm.getElementAt( index );
//dlm.elementAt( index ); 도 가능. 똑같음.
5. 리스트에서 선택한 index 값 삭제
1) View에서 선택한 index 얻기
int index = jl.getSelectedIndex();
2) Model에서 삭제
dlm.removeElementAt( index );