2011-08-21 9 views
4

자바의 UML 클래스 다이어그램 도구에 대한 개인 프로젝트를 수행하고 몇 가지 디자인/프로그래밍 문제에서 실행 중입니다.UML 클래스 다이어그램 도구 설계하기

가장 먼저 클래스 다이어그램 상자가 있습니다. 나는 그것을 표현하기 위해 자신의 구성 요소를 만들면 생각하지만 패널에 그려지는 경우 마우스로 돌아 다니는 것이 어색 할 것입니다. java의 모든 레이아웃 관리자가 상자를 아무 곳이나 자유롭게 배치 할 수 있기 때문에.

또는 구성 요소를 패널에 사각형 상자로 그리려면 구현이 가장 간단하지만 마우스로 이동할 수는 없습니다.

이 힌트는 어떻게해야합니까? 내가 그것을 표현하기 위해 내 자신의 구성 요소를 구축하지만 이 패널에 그려진 때, 마우스로 이동할 어색 될 경우

답변

2

나는 생각하고있다. java의 모든 레이아웃 관리자가 상자 을 자유롭게 놓을 수 없으므로. 당신은 절대 위치에 구성 요소가 필요한 경우

당신은 가능성을 가지고 :

  1. 가 널 레이아웃 매니저 사용 (BAD 솔루션을하지만, 제한된 특정 경우에 당신은 약간의 시간을 절약 할 수 있습니다) 구현
  2. 당신의 내가 패널에 사각형 박스로 내 구성 요소를 그릴 선택하면 자신의 레이아웃 매니저는

또는 다음이 될 것입니다 구현하는 것이 가장 간단하지만 마우스로 을 옮길 수는 없습니다.

맞아요. 마우스 상호 작용이 필요한 경우 직사각형을 그리는 것이 아니라 구성 요소를 사용하는 것이 좋습니다.

+0

실제로 사용자 정의 레이아웃 관리자를 만드는 방법에 대한 Oracle 설명서를 읽는 중입니다. 저는 메뉴 패널의 버튼을 클릭하고 패널에서 마우스를 아무 곳이나 클릭하여 패널에 새로운 클래스 상자를 추가하고 상자가 나타납니다. 그리고 나중에, 마우스로 움직일 수 있습니다. 내 자신의 레이아웃 관리자를 구현하는 것이 더 매력적으로 보입니다. – bili

+0

@bill : 튜토리얼을 읽으십시오. 레이아웃 관리자를 구현하면 구성 요소의 절대 위치를 지정할 수 있으며 동시에 표시된 각 구성 요소에 마우스 수신기를 연결할 수 있습니다. – Heisenbug

+0

+1, 구성 요소를 사용하는 것이 쉬운 방법입니다. – camickr

1

불행히도 Java Swing에는 Canvas 클래스가 없으므로이 문제에 이상적입니다. 그러나 this question and its answers은 JPanel에서 캔버스와 비슷한 동작을 구현하는 방법을 보여줍니다. JPanel에 캔버스처럼 수동으로 상자를 그립니다.

패널에서 상자를 이동하려면 JPanel에서 마우스 이벤트를 캡처하여 직접 처리 할 수 ​​있습니다.

+0

레이아웃 관리자 때문에 구성 요소를 자유롭게 이동할 수 없다고 생각하기 때문에 직사각형 그리기에 대해 생각했다고 생각합니다. 구성 요소와 같은 캔버스를 사용하는 것은 좋은 생각이 아닙니다. 내 생각에 그리는 사각형에 마우스 수신기를 연결할 수 없기 때문입니다. – Heisenbug

+0

스윙에 "캔버스 클래스"가 없다는 것은 무엇을 의미합니까? Canvas에는 특별한 기능이 내장되어 있지 않습니다. 모든 기능을 직접 추가해야합니다. 이것은 JComponent 또는 JPanel로하는 것과 완전히 같습니다. – camickr

+0

예, 0verbose가 절대적으로 옳습니다. 제가 직사각형을 그려 넣을 수없는 이유입니다. – bili

3

또한 몇 가지 다이어그램 도구의 기초로 사용되는 JGraph을 고려하십시오.

2

또 다른 그래프 시각화 도구는 JUNG framework입니다. 충분히 쉽게 확장 할 수있는 유용한 동적 "레이아웃 관리자"가 제공됩니다. Plus에는 플러그 가능한 확장 디자인을 사용한 풍부한 사용자 (마우스를 통한) 기본 상호 작용이 있습니다.

0

여기이 튜토리얼은 Resizable component이며 정확하게 필요한 부분입니다. 패널은 레이아웃 관리자를 전혀 사용하지 않습니다! 이제 코드를 가지고 놀고 클래스 다이어그램에 맞게 재구성 할 것입니다.

다음은 패널에서 주위를 이동할 때 화살표가 상자의 날짜 위치를 업데이트하도록 관찰자 패턴을 구현합니다.

+0

안녕하세요, stackoverflow에 오신 것을 환영합니다. 당신이 찾고 있던 답변을 발견하게되어 기쁩니다. 이것은 질의 응답 사이트입니다. 우리는 일반적으로 댓글과 득표를 사용하고 "수락"기능을 사용하여 좋은 답변에 감사드립니다. 귀하의 답변을 편집하여 귀하가 쓴 감사를 삭제하십시오. 위에서 언급 한 방법 중 하나를 사용하면 유용한 답변을 감사 할 수 있습니다. – Flexo

+0

감사! 사이트 규칙에 익숙해 질 것입니다. – bili

관련 문제