我是论坛的新手,所以我希望我不会问过去曾回答的问题。在发布之前我试图彻底寻找答案。
我目前正在制作饼图,最终将用于跟踪财务费用。现在我有几个组成每个切片的类别。我试图隐藏零值切片的图例。
我在javaFX中这样做。在编程方面,我还是非常环保,没有Java之外的经验。任何帮助解释傻瓜将不胜感激。感谢。
添加了图片和完整代码,以说明手头的问题。餐馆&餐饮,购物和娱乐娱乐都没有价值。我想在此示例中隐藏这些项目的图例。
package Example;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.chart.PieChart;
public class PieExampleController implements Initializable {
@FXML
private PieChart pieChart;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
// TODO Auto-generated method stub
ObservableList<PieChart.Data> pieChartData = FXCollections.observableArrayList(
new PieChart.Data("Groceries", 1),
new PieChart.Data("Transportation", 1),
new PieChart.Data("Restaurants & Dining", 0),
new PieChart.Data("Shopping & Entertainment", 0));
pieChart.setData(pieChartData);
}
}
答案 0 :(得分:0)
多数民众赞成我这样做:
item
答案 1 :(得分:0)
如果数据是不可变且不可修改的,那么在启动时手动添加一个非空数据条目(或删除空条目)就好了。另一方面,如果它可以在图表的生命周期内改变,我们需要一种机制来自动处理添加/删除:FilteredList来拯救。
以下是
的示例有了这个,我们可以在filteredList上安装一个谓词,根据需要隐藏项目:该示例使用Slider来更新数据值应包含在图表中的较低阈值。
不幸的是,PieChart有一个couple of bugs(叹息......无论我触摸FX,它们总是沸腾......)干扰这么简单的设置
在一个示例中,可以通过在设置实际条件之前禁用动画并清除列表(设置阻止所有的谓词)来避免这两个问题。在生产代码中,这种调整可能是也可能是不可能的。
示例:
public class FilteredPieChartExample extends Application {
@Override
public void start(Stage primaryStage) {
FilteredList<Data> filtered = getChartData();
//ListChangeReport report = new ListChangeReport(filtered);
PieChart pieChart = new PieChart(filtered);
// bug in pieChart: can't handle data modification with animation on
pieChart.setAnimated(false);
// use slider to set lower threshhold for value of data to show in pie
Slider slider = new Slider(-1., 100., -1.);
slider.valueProperty().addListener((src, ov, nv) -> {
// actually, cannot handle data modification at all ... need to clear out first ...
// bug in pieChart.dataChangeListener: doesn't handle replaced correctly
filtered.setPredicate(data -> false);
filtered.setPredicate(data -> data.getPieValue() > nv.doubleValue());
//report.prettyPrint();
});
primaryStage.setTitle("PieChart");
Pane root = new VBox(pieChart, slider);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
private FilteredList<Data> getChartData() {
// use ObservableList with extractor on pieValueProperty
ObservableList<Data> answer = FXCollections.observableArrayList(
e -> new Observable[] {e.pieValueProperty()}
);
answer.addAll(
new Data("java", 17.56),
new Data("C", 17.06),
new Data("C++", 8.25),
new Data("C#", 8.20),
new Data("ObjectiveC", 6.8),
new Data("PHP", 6.0),
new Data("(Visual)Basic", 4.76),
new Data("Other", 31.37),
new Data("empty", 0)
);
return new FilteredList<>(answer);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
@SuppressWarnings("unused")
private static final Logger LOG = Logger.getLogger(FilteredPieChartExample.class
.getName());
}