2010-01-23 2 views
4

Netbeans Swing GUI 작성자를 통해 Netbeans에서 GUI를 만들었습니다. 그래서 팔레트 창에서 Swing Components를 드래그 앤 드롭하면 모든 코드가 넷빈즈에 의해 생성됩니다.Netbeans가 GUI 코드를 생성하는 방법을 리팩토링하는 방법은 무엇입니까?

코드가 너무 길어 유지할 수 없습니다 (약 10,000 줄). 그래서 일부 전문가는 내 코드를 리팩터링하도록 제안했습니다.

나에 의해 생성 된 코드를 리팩토링 할 수 있지만 생성 된 코드에서 편집을 허용하지 않기 때문에 Netbeans에서 생성 된 코드를 리팩토링하는 방법을 모르겠습니다.

제안 사항?

+0

실제로 어떻게 그 10.000 라인을 많이 생성된다? –

+0

약. 8500 라인은 유전자 코드입니다 ... 나머지는 내가 ActionPerformed diff 메소드로 작성한 코드입니다. JButtons .. –

+0

편집 된 답변보기 –

답변

2

글쎄 - 코드가 생성 된 경우 생성 된 도구로 처리 할 수있는 한 리팩토링에 어떤 이점도 보이지 않습니다.
도구 (이 경우 디자이너를 의미 함)는 코드를 업데이트하는 즉시 모든 리팩토링 작업을 "파괴"합니다.

그러나 컨트롤/창/...을 여러 컨트롤로 분할하면 코드가 자동으로 짧아 지므로 UI를 더 쉽게 유지 관리 할 수 ​​있습니다.

결론 : 생성 된 코드를 리팩터링하지 않고 컨트롤을 리팩토링하십시오.

+0

Netbeans는 컴파일러 오류를 표시하여이를 처리하는 것을 거부했습니다 - 코드가 너무 큽니다 .... –

+0

GUI가 패널을 통해 desined되었습니다 ... GUI에 많은 패널이 있습니다 .... 어떻게 각 Panel에 대해 별도의 클래스를 작성하고 기본 JFrame에서 호출 할 수 있습니까? –

+0

Peter Lang의 말처럼 : 컨트롤 그룹에 JPanels를 사용하여 "메인 프레임"으로 드래그합니다. – Matthias

8

10.000 줄의 코드는 모두 하나의 클래스에있는 것처럼 들립니다.

소스를 모델,보기 및 제어 (MVC)로 분할하여 시작하십시오.


또한 별도의 클래스로 일부 JPanels을 추출 할 수 있습니다. 이를 수행하는 한 가지 방법은 새로운 JPanel (새 파일)을 만들고 하나의 기본 패널에서 구한 내용을 새로운 JPanel으로 잘라내어 붙여 넣는 것입니다. 새 패널을 저장하고 컴파일하십시오.

그런 다음 Beans 선택, 메인 프레임으로 이동 - 당신의 Palette에서>Choose Bean을 새로 만든 클래스 (예를 들어 com.example.YourPanel)을 선택합니다.

시도하기 전에 응용 프로그램의 백업을 준비하십시오.

+0

+1 참고 : 새 JPanel의 레이아웃 관리자를 원래 패널과 일치하도록 설정하는 것이 중요합니다. 그렇지 않으면 붙여 넣기의 결과가 원본처럼 보이지 않습니다. –

1

layoutmanagers로 GUI 코드를 손으로 코딩하십시오.

GUI 빌더 도구를 사용하면 GUI 코드를 리팩터링하는 것이 거의 불가능합니다. 이 바보 같은 Intellij Swing GUI 디자이너 양식을 사용해야합니다. forms.XML 파일에서 업데이트되지 않기 때문에 Eclipse에서 패키지 이름을 바꿀 수 없습니다.

GUI 빌더와 떨어져 있어야합니다. 실제로 복잡하고 유지 보수가 쉬운 GUI를 만들고 싶다면 GridBagLayout과 나머지 모든 것을 사용하여 손으로 직접 해보십시오.

0

netbeans를 사용해야하는 경우 프로젝트 제한 (예 : 나머지 팀 또는 요구 사항)으로 인해 Matisse를 사용하여 거대한 양식을 디자이너가 편집 할 수있는 작은 패널로 나눕니다. 새 양식을 작성하고 큰 양식에서 새 양식으로 패널을 자르고 붙이면됩니다.

그러나 동시에 모든 비즈니스 논리가 UI 클래스 밖으로 이동되었는지 확인하십시오.

matisse/netbeans를 사용할 필요가없는 경우 Eclipse에서 프로젝트를 열고 WindowBuilder를 사용하여 양식을 편집 할 수 있습니다. 편집 할 수없는 양식 대신 실제 Java 코드에서 수행하므로 양식을 자르고 그것을 마음의 내용으로 편집하십시오.

0

응용 프로그램 논리를 별도의 하위 클래스로 추출 할 수 있습니다. 그런 다음 서브 클래스를 직접 사용하십시오. 나는 다음과 같은 방법으로 성공했다.

  1. 응용 프로그램 논리와 관련된 우리가 정의한 구성원이 새로 만든 하위 클래스로 이동했습니다.
  2. 구성 요소 액세스 수정자가 "보호됨"(기본값은 으로 "개인"입니다). 방법 : 오른쪽 클릭 -> 속성 -> 코드 (탭) -> 설정 "변수 수정 자"를 "보호 됨"
  3. 이벤트 처리 방법을 하위 클래스로 이동 - 속성 창을 사용하여 이벤트를 구성 요소에 추가하는 경우 다음 코드 샘플에서와 같이 관련 코드를 추가하여 initComponents() 함수를 변경합니다. 여기서 btnNum6ActionPerformed()의 정의는 빈 몸체가있는 클래스에 추가됩니다. 불행히도 btnNum6ActionPerformed()는 private이며 NetBeans IDE를 사용하여 액세스 한정자를 변경할 수 없습니다. 그러므로, 그들은 무시 될 수 없다. 이를 제거하기 위해 다른 중개 함수를 정의하여 btnNum6ActionPerformed() 내에서 호출 할 수 있습니다. 기본 클래스와 중개 이벤트 처리 함수를 추상화하는 것이 좋습니다.

    btnNum6.addActionListener(new java.awt.event.ActionListener() { 
        public void actionPerformed(java.awt.event.ActionEvent evt) { 
         btnNum6ActionPerformed(evt);//Definition of this method is added too 
        } 
    }); 
    
관련 문제