2012-08-30 4 views
1

XML 파일을 동적 그래프로 변환하는 응용 프로그램을 개발하므로 JPanel을 확장하여 노드 (circularnode.java)를 정렬하고 JPanel을 확장하여 화살표를 추가하는 클래스를 만들었습니다 arrow.java)하지만 화살표를 표시 할 때는 항상 노드 뒤에 있습니다. circularnode.java의 배경은 그것들을 숨 깁니다.스윙에서 JPanel 조작

다른 JPanel 위에 표시하거나 모양 순서를 제어하려면 어떻게해야합니까?

+2

'JFreeChart','JGraph' 또는'JUNG'과 같은 기존 [library] (http://stackoverflow.com/q/51574/230513)도 고려하십시오. – trashgod

답변

4

JPanel에서 화살표와 노드를 직접 그리는 코드를 추출하는 것이 좋습니다. 아마도 자신을 그리는 법을 알고있는 Arrow와 Node 클래스를 만들 수 있습니다 (예 : public void paint(Graphics g) 메서드).

그런 다음 당신은 당신의 JPanel의 클래스에 대한 ArrayList<Arrow>ArrayList<Node> 필드를 작성하고 목록을 반복하고 JVM에서 얻은 Graphics 문맥으로, 각 항목의 paint(...) 방법 통과를 호출하여 인 JPanel의 paintComponent(...) 방법 모두를 그릴 수 있습니다.

다른 JPanels에서 다른 JPanel을 절대적으로 그릴 필요가있는 경우 상단 JPanel이 setOpaque(false)을 통해 불투명하지 않아야 배경이 채워지지 않아야합니다. 그것을 통해. 보다 구체적인 도움말은

(이 매우 유용한 구조를 설명하는 링크를 참조하십시오) 문제, 현재 코드에 대한 자세한 우리에게 말하고, 심지어 바람직 SSCCE의 형태로, 코드의 일부를 게시 고려 .

어쨌든 stackoverflow.com에 오신 것을 환영합니다!

+0

정말 고맙습니다. 리스트 요소에서 재정렬하여 추천 한 것을 수행했습니다. \t'public ElementMenu (String texte, String couleurNormal, Color couleurActif, int taille) { \t \t this.couleur = couleurNormal; \t \t this.couleurNormal = couleurNormal; \t \t this.couleurActif = couleurActif; \t \t this.texte = texte; \t \t this.Ident = Ident; \t \t largeur = taille; \t \t this.setSize (새 치수 (대형, 대형)); \t \t this.setOpaque (false); \t \t this.setLayout (new BorderLayout()); \t \t ajouterListener(); \t} ' – Rad1

+0

@ Rad1 : 환영합니다! 주석은 코드 형식을 올바르게 표시하지 않기 때문에 질문을 편집 할 때 코드를 게시하고 싶을 것입니다. 또한 게시 된 코드가 4 칸 들여 쓰기되어 사이트에 코드 서식이 표시되도록 할 수 있습니다. –

+0

나는 새롭고 iam이 진짜로 나쁜 시간가는 가지를 가지고있다! 나는 내 게시물을 더 명확히하려고 노력할 것이다 – Rad1