2014-04-29 2 views
0

Java 및 JavaFX의 새로운 기능입니다.프로젝트에서 JavaFX 객체를 객체에 링크하려면 어떻게합니까?

저는 실제로 나무를 시뮬레이션하려고합니다. 자바는 그렇게 보인다. 트리는 그 루트에 의해 정의되는 트리 노드입니다. 각 treenode에는 어린이가 있습니다 (자식이없는 treenode는 잎입니다).

콘솔을 사용하여 트리를 저장, 저장 및 복원하는 방법을 설계했습니다. 문제 없어.

다음 단계는 내 노드와 같이 많은 FXML 객체를 창 안쪽에 그리는 것입니다. 질문 : 단추를 클릭하면 트리 노드로 돌아갈 수 있도록 단추를 트리 노드에 연결하려면 어떻게해야합니까?

나는 bt.setUserData (TreeNode를 노드)를 사용하려하지만 마우스 이벤트 핸들러를 사용할 때 나는

코스 clicDessin의
@FXML protected void clicDessin(MouseEvent event) throws IOException { 
// teh anchorpane xhere I want to throw some information about my tree-node 
    AnchorPane arbre = FXMLLoader.load(getClass().getResource("noeud.fxml")); 
    Noeud n = ????? 
    AnchorPane.setBottomAnchor(arbre, 0.0); 
    AnchorPane.setTopAnchor(arbre, 0.0); 
    ((Pane) Main.root.lookup("#pdt")).getChildren().add(arbre); 
    ((TextField) arbre.lookup("#nomnoeud")).setText(n.getNom()); 
    ((TextArea) arbre.lookup("#descnoeud")).setText(n.getDesc()); 
} 

가 클릭에 관련된 방법을 복구 할 수 없습니다 내 버튼을위한 마우스.

도움을 주시면 감사하겠습니다. 가능한 한 단순하게 머물러주십시오. 나는 자바 전사도 아니고 영어도 아니다.

+0

"내 트리 노드로 돌아 가라"는 것은 무엇을 의미합니까? – awksp

+0

나는 커스텀 객체와 그것의 그래픽 표현 사이에 링크를 만들고 싶었다. 목표는 그래픽보기를 클릭하여 사용자 지정 개체의 모든 속성을 표시하거나 수정할 수있게하는 것입니다.부모 JavaFX 클래스에서 상속 받고 사용자 정의 객체 (아래 참조)를 구현하는 새 클래스를 만들어서 대답을 찾은 것 같습니다. – PhilK

답변

0

OK, 나는 대답을 찾았습니다. 그리고 그것은 꽤 분명했습니다, 미안 해요. 누군가가 필요로 할 경우를 대비하여 답변을 게시합니다.

창이나 장면에 모양을 배치하려면 아이를 추가하기 만하면됩니다. 사용자 지정 개체와 자식 사이에 링크가 필요한 경우 사용자 지정 개체를 속성으로 표시하는 부모 클래스를 확장하는 새로운 클래스를 만드는 것뿐입니다.이 속성을 표시하려면 public이 필수입니다.

는 그래서 클래스 DrawTreenode

public class DrawTreeNode extends Parent { 
public TreeNode monNoeud; 
private double x, y, h, l; 
Rectangle fond = new Rectangle(); 
Label l1 = new Label(); 
Label l2 = new Label(); 

이벤트 핸들러를 구현하는 기본 방법을 만들

public DrawTreeNode(TreeNode n, double posX, double posY, 
double largeur, double hauteur) 
{ 
    TreeNode = n; 
    x = posX; 
    y = posY; 
    h = hauteur; 
    l = largeur; 

자바 FX 객체의 TreeNode 속성

l2.setText(String.valueOf(TreeNode.numChildren())); 
    l2.relocate(x+10, y+15); 
    this.getChildren().add(l2); 

와 내가 할 수에 따라 변경 될 수 내 사용자 정의 속성을 참조하는 (또는 적어도 액세스하는) 이벤트 처리기 구현 Y 여기

this.setOnMouseClicked(new EventHandler() { 
     public void handle(MouseEvent me) { 
      appuyer(); 
     } 
    }); 

} 

, 그것은 자바 FX는 표준 클래스의 메소드를 추가 사용하는 창에서 아무 곳이나 내 프로젝트에서 사용자 지정 개체

public void appuyer() { 
    AnchorPane arbre = null; 
    try { 
     arbre = FXMLLoader.load(getClass().getResource("noeud.fxml")); 
     ((Pane) Main.root.lookup("#pdt")).getChildren().add(arbre); 
     ((TextField) arbre.lookup("#nomnoeud")).setText(monNoeud.getNom()); 
     ((TextArea) arbre.lookup("#descnoeud")).setText(monNoeud.getDesc()); 
     ((TextField) arbre.lookup("#numfils")).setText(Integer.toString(monNoeud.numEnfants())); 
     ((TextArea) Main.root.lookup("#txtaide")).setText("Cliquer pour voir/modifier le noeud."); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

내가 GraphTree (기본적으로 사용자 정의 자바 FX 모양)을 추가 할 수의 속성을 사용 모양.

((Pane) Main.root.lookup("#grille")).getChildren().add(new DrawTreenode(((Treenode) element), 
         calculX(((Treenode) element), largeurcell), calculY(((Treenode) element), hauteurcell), 
         largeurcell, hauteurcell)); 

영어로 가능한 한 많이 번역하려고했습니다. 나는 그것이 도움이되기를 바랍니다.

관련 문제