2017-09-04 332 views
0

我創建了一個javafx餅圖,並希望在用戶單擊該餅圖片時執行某些操作。我正在學習本教程:TutoJavaFx:餅圖的處理事件

我使用相同的代碼,但問題是我的標籤未顯示在數據節點上。 enter image description here

這是我的代碼

GraphOne.setData(pieChartData); 
    for (final PieChart.Data data : GraphOne.getData()) { 
     data.getNode().addEventHandler(MouseEvent.MOUSE_ENTERED, 
       new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent e) { 

       caption.setTranslateX(e.getSceneX()); 
       caption.setTranslateY(e.getSceneY()); 
       caption.setText(String.valueOf(data.getPieValue()) + "%"); 

      } 
     }); 
    } 

Tutoriel的代碼:

final Label caption = new Label(""); 
caption.setTextFill(Color.DARKORANGE); 
caption.setStyle("-fx-font: 24 arial;"); 

for (final PieChart.Data data : chart.getData()) { 
    data.getNode().addEventHandler(MouseEvent.MOUSE_PRESSED, 
     new EventHandler<MouseEvent>() { 
      @Override public void handle(MouseEvent e) { 
       caption.setTranslateX(e.getSceneX()); 
       caption.setTranslateY(e.getSceneY()); 
       caption.setText(String.valueOf(data.getPieValue()) + "%"); 
      } 
     }); 
} 

enter image description here

我的問題是如何綁定標籤的位置的MouseEvent?

回答

1

我覺得教程已經下降了一些代碼,因爲我們不能顯示JavaFX controlsLabel而不將其添加到javafx.​scene.Parent和代碼沒有添加它,它可以使如何顯示!

這裏我們添加了LabelTooltip相同的代碼,並顯示Tooltip本身含有Label

final Label caption = new Label(""); 
caption.setTextFill(Color.DARKORANGE); 
caption.setStyle("-fx-font: 24 arial;"); 
Tooltip container = new Tooltip(); 
container.setGraphic(caption); 

for (final PieChart.Data data : chart.getData()) 
{ 
data.getNode().addEventHandler(MouseEvent.MOUSE_ENTERED, 
     new EventHandler<MouseEvent>() 
      { 
       @Override 
       public void handle(MouseEvent e) 
       { 
       if (container.isShowing()) 
       { 
        container.hide(); 
       } 
       caption.setText(String.valueOf(data.getPieValue()) + "%"); 
       container.show(stage, e.getScreenX(), e.getScreenY()); 
      } 
     }); 
    } 

它的首選使用Java 8個Lambda表達式和流 這樣的代碼會

final Label caption = new Label(""); 
    caption.setTextFill(Color.DARKORANGE); 
    caption.setStyle("-fx-font: 24 arial;"); 
    Tooltip container = new Tooltip(); 
    container.setGraphic(caption); 

    chart.getData().forEach((data) -> 
    { 
     data.getNode(). 
       addEventHandler(MouseEvent.MOUSE_ENTERED, e -> 
       { 
        if (container.isShowing()) 
        { 
         container.hide(); 
        } 
        caption.setText(String.valueOf(data.getPieValue()) + "%"); 
        container.show(stage, e.getScreenX(), e.getScreenY()); 
       }); 
    }); 

希望這是有用的