2014-01-21 7 views
3

매우 유용하고 쉬운 방법으로 원형 차트를 업데이트하고 싶습니다. 예를 들면 :라이브 업데이트 원형 차트

import javafx.application.Application; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.event.EventHandler; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.chart.PieChart; 
import javafx.scene.control.Label; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 


public class MainApp extends Application { 

    @Override 
    public void start(Stage stage) { 
     Scene scene = new Scene(new Group()); 
     stage.setTitle("Imported Fruits"); 
     stage.setWidth(500); 
     stage.setHeight(500); 

     ObservableList<PieChart.Data> pieChartData = 
       FXCollections.observableArrayList(
       new PieChart.Data("Grapefruit", 13), 
       new PieChart.Data("Oranges", 25), 
       new PieChart.Data("Plums", 10), 
       new PieChart.Data("Pears", 22), 
       new PieChart.Data("Apples", 30)); 

     final PieChart chart = new PieChart(pieChartData); 
     chart.setTitle("Imported Fruits"); 
     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()) 
           + "%"); 
         } 
        }); 
     } 

     ((Group) scene.getRoot()).getChildren().addAll(chart, caption); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

나는이 같은 차트 자바 메서드를 호출하고 업데이트 할 차트를 표시 할 때 다음을하기 위해 내가 코드를 편집 할 수있는 방법

PieChartUpdate(valueOne, valueTwo, valueThree); 

당신이 저를 보여줄 수를 라이브 업데이트를보다 쉽게 ​​사용할 수 있습니까?

+0

지금까지 시도한 것과 시도한 문제는 무엇입니까? –

+2

그 아이디어가 흥미 롭기 때문에 투표하는 것이지만 문제는 너무 숙제입니다. 대부분 차트에 새 값을 설정 한 다음 모든 것을 다시 레이아웃해야합니다. 하지만 JavaFX API에 대한 지식이 없습니다. – GGrec

답변

4

, PieChart.Data 좋아하고 물론, PieChart 설정하는 데 사용되는 모든 클래스입니다 ObservableList 그들이 PieChart 뭔가 변화하는 순간을 업데이트 할 수 있도록 이미 설계, 그것을 할 수 목록 자체 또는 Data 개체 내부의 값 이 작업을 수행하는 방법은 the binding chapters을 참조하십시오. 그러나 PieChart에 대한 고유 한 바인딩을 작성할 필요는 없습니다.

아래 코드는 원하는대로 수행해야합니다. addData(String name, double value)을 사용하여 원형 차트에 대해 Data 개체를 새로 만들거나 메서드의 첫 번째 매개 변수와 같은 name이있는 기존 개체를 업데이트하십시오. PieChart은 목록이 변경되면 (새 Data 개체가 추가됨) 또는 Data 개체가 변경되면 자동으로 애니메이션을 재생합니다.

//adds new Data to the list 
public void naiveAddData(String name, double value) 
{ 
    pieChartData.add(new Data(name, value)); 
} 

//updates existing Data-Object if name matches 
public void addData(String name, double value) 
{ 
    for(Data d : pieChartData) 
    { 
     if(d.getName().equals(name)) 
     { 
      d.setPieValue(value); 
      return; 
     } 
    } 
    naiveAddData(name, value); 
} 
+0

전체 코드를 붙여 넣을 수 있습니까? 이 'pieChartData'가 올바르지 않습니다. –

+0

나 혼자서 할 수 있다고 생각해. 'pieChartData'를'MainApp' 클래스의 새로운 속성으로 선언하십시오. 이것은 코드에 대한 사소한 변경 일뿐입니다. – denhackl

+0

정말 도움이 필요합니다. 나는이 코드를 작동시킬 수 없다. –