2008-10-03 5 views
0

작성한 테이블 클래스를 사용하여 항목 테이블을 수정합니다. 테이블 모델을 사용하여 이러한 항목을 JTable에 표시하려고합니다. 나에게 테이블 모델은 내 GUI 패키지에 속하지만 테이블은 테이블 모델을 필요로하기 때문에 테이블 모델을 필요로한다. 당신이 이것을해야한다면, 당신이 사용하는 수업 구조는 무엇입니까? 아니면 내 생각에 흐름이 있고 그들은 같은 패키지에 속해 있습니까?Java 테이블 모델 디자인

답변

0

테이블 모델은 테이블이 들어있는 테이블에 대해 알 필요가 없습니다. 모델 패키지에 테이블 모델을 넣고 뷰 패키지에 테이블을 넣습니다. 컨트롤러는 모델 패키지에 모델을 요청하고, 뷰 패키지에 테이블을 요청하고 테이블에 해당 모델을 설정합니다.

1

나를 위해 tablemodel은 GUI 인 위젯의 일부입니다. 비즈니스 로직 클래스의 javax.swing 패키지에 의존하지 않습니다.

따라서 비즈니스 계층에서 테이블 모델을로드하는 데 어댑터 또는 다른 메커니즘을 사용하지만이 정도의 분리는 유용 할 수 있습니다.

결정은 프로젝트의 크기에 따라 다르며 이보다 훨씬 더 복잡 할 수 있습니다. 예 : 좀 더 추상적 인 경우는 jgoodies binding 프레임 워크와 문서를 참조하십시오.

1

모델은 데이터를 보유하는 비트입니다. 그러한 모델이하는 것처럼 청취자를 유지하고 화재를 발생시켜야합니다.

이제 모델 내에서 일종의 위임을 통해 데이터를 변환하거나 유형을 적용 할 수 있습니다. 따라서 javax.swing.table과는 아무런 관련이없는 모델 객체에 데이터가 있습니다. 그런 다음 기본 모델에 위임하는 TableModel을 구현하십시오. 그 TableModel를 가지는 JTable를 작성합니다. 다만, 기본이되는 모델의 참조는 없습니다.

2

TableModel어댑터입니다. 항상 테이블 모델을 작성하여 AbstractTableModel까지 확장하고 내 GUI 패널 클래스의 개인 내부 클래스로 사용하십시오. 당신은 몇 가지 방법을 작성해야합니다 : 그것은이 정보를 입력 할 수있는 getRowCount, getColumnCountgetValueAt

귀하의 GUI 클래스는 일부 컨트롤러에 액세스 할 수 있어야합니다. 컨트롤러가 데이터에 대한 업데이트를 발견하면 GUI 클래스에 알려야하며이 클래스는 AbstractTableModel.fireTableDataChanged 또는 다른 적절한 메소드를 호출 할 수 있습니다. 그런 다음 컨트롤러와 동기화 테이블 모델의 데이터를 유지해야하기 때문에

DefaultTableModel 클래스를 사용하지 마십시오. 내가 말했듯이 테이블 모델은 컨트롤러의 데이터를 JTable이 이해할 수있는 방식으로 표시하는 어댑터입니다.

+0

Ahum, 구현해야하는 메서드는

 public int getRowCount(); public int getColumnCount(); public Object getValueAt(int row, int column); 
입니다. 그렇습니까? – dhiller

+0

하하 네. 죄송합니다. 먼저 체크 했어야 했어! –

1

중요한 테이블 또는 목록 기반 개발을 수행하는 사람은 모두 Glazed Lists을 살펴볼 것을 강력히 제안합니다. TableModel과 CellRenderers, JGoodies와의 바인딩, 등등 ... GL에 관해서는 1 년 가량 걸렸고 내 개발은 한번도 없었습니다. Glazed Lists 접근법은 놀라 울뿐입니다.

  1. 을하고 싶은 정상적인 일을 할 매우, 매우 쉽게 할 것을 가능하게한다 :

    GL은 목록 기반 데이터 바인딩 및 처리를위한 선택의 나의 프레임 워크를 만드는 두 가지 특징이있다 너가하고 싶을지도 모르는 정말로 정말로 어려운 물건

만일 당신이 인상 지우지 않는지보십시오. 샘플 앱으로 노는 것을 강력히 권장하며 실제 코딩 과정을 안내하는 몇 가지 화면 캐스트를 시청하십시오.