[Java] 2020.11.20. day_23 Component종류

2020. 11. 20. 17:21Web_Back-end/Java SE

○ Component 종류 

  Component 종류
Menu 고정된 위치에서 사용자에게 서비스를 제공할 때 
MenuBar, Menu, MenuItem 으로 구성
사용법)
1 JMenuBar 생성
JMenuBar jmb = new JMenuBar();

2 Menu생성
Menu m = new Menu("대표이름");

3 MenuItem 생성
MenuItem mi = new MenuItem("서비스할 이름");

4 생성된 MenuItem을 Menu배치
m.add( 메뉴아이템 객체 );
m.add( 다른 메뉴객체 ); //메뉴아이템에서 하위메뉴를 제공

5 메뉴아이템을 가진 메뉴가 MenuBar에 배치
mb.add(메뉴객체);

6 MenuBar를 Window Component에 배치

MVC Pattern을 도입하여 제작된 컴포넌트들
JCombo, JList, JTable
MVC (Model, View, Controller)
Model : 데이터를 관리하고 처리하는 일
View : 데이터를 보여주는 일
Controller : 이벤트처리, 업무로직 구현하는 일

하나의 서비스를 분해하여 구현하는 개발방식(Design Pattern)
생명주기가 서로 다른 작업을 분해하여 구현하는 개발방식

디자인 : 디자이너
업무로직 : 개발자
데이터처리 : DBA

<Model1 방식의 개발>
서로다른 생명주기를 가진 업무가 하나의 파일에 존재하면
-파일의 복잡도 상승
-파일을 수정할 때 다른 코드를 훼손할 가능성
-업무분장이 애매해진다
-코드수정의 시간이 증가

+제작이 쉽다
+파일관리의 용이성
+값 사용이 편하다
+에러처리가 편하다

<Model1방식의 개발 , MVC Pattern2>
파일 하나에서 서로다른 생명주기를 가진 코드를 분리한 것
-파일이 많이 생성되므로 파일관리의 복잡도 상승
-값을 보내고 받기 어렵다

+업무를 구분하여 작성하기 좋다
  (유지보수의 편의성 향상 => 프로그램의 생명이 길어진다)
+소스코드의 복잡도가 낮아진다
JComboBox 사용법)
1 데이터를 가진 Model 클래스 생성
DefaultComboBoxModel<E> dcbm = new DefaultComboBoxModel<E>();

2 Model 객체에 데이터 추가
dcbm.addElement("값");

3 데이터를 보여줄 View클래스를 생성
JComboBox jcb = new JComboBox( dcbm ); //has a 관계
JList 사용법)
1 데이터를 가진 Model 클래스 생성
DefaultListModel<E> dlm = new DefaultListModel<E>();

2 Model 객체에 데이터 추가
dlm.addElement("값");

3 데이터를 보여줄 View클래스를 생성
JList jl = new JList( dlm ); //has a 관계

4 ScrollBar 설정
JScrollPane jsp = new JScrollPane( jl );
TitledBorder 테두리를 가진 제목 설정하는 Component
대부분의 Component는 border를 가질 수 있다

사용법)
1 생성
TitleBorder tb = new TitleBorder("타이틀");

2 Border가 필요한 Component에 Border를 설정
JButton jbtn = new JButton("button");
jbtn.setBorder( tb );
JTable 데이터를 시안성을 높여서 보여줄 때
사용법)
1 데이터를 가진 Model 클래스 생성
javax.swing.table 패키지에서 DefaultTableModel 클래스를 제공
- 컬럼명을 일차원 배열로 생성
String[] columnNames = {"컬럼명"," "," ",,,,};
- 데이터는 이차원 배열로 생성
String[][] rowData = { {"값","값",,,,}, {"값","값",,,,}, {"값","값",,,,} ,,,,};

DefaultTableModel dtm = new DefaultTableModel(rowData, columnNames);

2 Model 객체에 데이터 추가
2-1 배열
String[] data = {"값",,,};
dtm.addRow( data );
2-2 Vector : is a 관계의 객체화로 객체를 생성하지 않는다
Vector<E> vec = new Vector<E>();
vec.add("값"); //컬럼의 개수만큼 add를 사용하여 값을 추가
dtm.addRow( vec );

3 데이터를 보여줄 View클래스를 생성
JTable jt = new JTable( dtm );

4 JTable은 ScrollBar를 가지고있지 않다
JScrollPane jsp = new JScrollPane( jt );

-JScrollPane을 사용하지 않고 JTable을 직접 배치하면 Table 의 header가 보여지지 않는다