2010-06-28 2 views
9

자바를 처음 사용하지는 않지만 학교/대학 환경에서만 사용 했으므로 엔터프라이즈에서 사용되는 모범 사례를 모릅니다.Java 데이터 바인딩 모범 사례

특히 저는 (UI 레이어에서 Swing을 사용하여) Java 데스크톱 응용 프로그램을 개발 중이며 특히 스윙 구성 요소와의 데이터 바인딩에 대한 모범 사례에 관심이 있습니다.

예를 들어 모델 레이어에서 모델 개체 목록을 가질 수 있으며이를 JTable에 표시해야합니다. 그런 다음 JTable의 단일 행을 선택하면 일부 JLabel에서 선택한 행에 해당하는 모델 객체에 관한 정보를 표시해야합니다.

어떤 라이브러리를 사용해야합니까? 그렇게하는 것이 가장 좋은 방법은 무엇입니까?

이 주제에 대해 배우고 다양한 솔루션의 장단점에 대해 알아볼 링크/기사/자습서 (/ 책)를 찾고 있습니다. 당신은 내가 다음과 같은 방법을 추천주는 구체적인 예를 들어

답변

6

:

  1. List 구현 RandomAccess을 지원 어디 List<Model> 같은 모델 객체를 표현 (예를 들어, ArrayList).
  2. 하위 클래스 AbstractTableModelgetValueAt(int row, int col)을 재정 의하여 List<Model>에 색인을 생성하고 적절한 Model 인스턴스를 검색하십시오. 그런 다음 바인드 할 특정 속성을 col 컬럼으로 리턴하십시오.

일반적으로 프레임 워크를 사용하는 것이 아니라 데이터 바인딩의 경우 롤업을 사용합니다. 편집기 스타일 패널의 경우 일반적으로 initialise(), commit()clear()을 구현합니다. initialise은 편집중인 도메인 객체의 인스턴스를 취하고 commit은 변경 사항을 적용하고 도메인 객체의 수정 된 인스턴스를 반환하고 clear은 모든 UI 구성 요소 값을 지 웁니다. 다시 기본값으로 설정합니다.

+0

그래서 객체를 편집하기위한 모든 필드와 컨트롤, initialize(), commit() 및 clear() 메소드를 포함하는 위젯을 생성해야한다고 (예 : JPanel의 서브 클래스 만들기) JPanel은 JFrame 레이아웃에 서브 클래스를 적용한 다음 선택 이벤트에 대한 응답으로 다양한 메소드를 호출합니까? –

+0

요컨대 - 그렇습니다. 통상, JPanel 서브 클래스가 에디터의 경우, 그것을 모덜의 JDialog로 표시하는 것이 좋습니다. 일반적으로 OK, Apply 및 Cancel 버튼과 함께 패널이 포함 된 JDialog를 만드는 JPanel에 정적 팩터 리 메서드를 추가합니다. – Adamski

1

확장을 위해 항상 응용 프로그램을 열어두고 결합 인수를 염두에 두십시오. 그 말은 UI 레이어 (Swing 구성 요소)와 관계없이 모든 데이터 모델을 별도의 데이터 구조에 저장해야한다는 것입니다. 필요로하는 모든 값을 제공하는 느슨하게 결합 된 별도의 데이터 공급자 패키지가있는 데이터 구조를 만들어야합니다. 일단이 디자인이 완성되면 UI 바인딩에 대한 걱정을 시작할 수 있습니다.

스윙 관련 개발에 알맞은 UI IDE (예 : Netbeans)가 있어야합니다. 언제나 layouts으로 가십시오. 레이아웃은 처음에는 디자인하기가 어렵지만 일단 작업을하게되면 정말 유용하고 편리 할 것입니다. 스윙과 당연한 스윙 워커에서 청취자를 더 깊이 이해해야합니다. Google을 사용하면 이러한 리소스를 실제로 찾을 수 있습니다.

1

선택 작업을 처리하려면 JTable의 선택 모델에 ListSelectionListener을 구현해야합니다. herehere 몇 가지 세부 정보를 얻을 수 있습니다.

이벤트가 시작되면 이벤트의 source을 포함하여 이벤트에 짝수 데이터가 제공됩니다. 선택한 행을 식별하는 데 사용할 수있는 선행 선택 색인도 제공됩니다 (다중 선택을 허용하지 않는다고 가정 할 경우).단추 값을 가져 오려면 테이블 모델 (또는 모델 디자인에 따라 다른 공유 모델)에서 데이터 개체를 수집해야합니다.

0

나는 스윙을 잘 모른다.하지만 모델 GUI 중재자 패턴을 사용해 보셨습니까? 모든 언어 및 모든 GUI 구성 요소에 적용 가능합니다.