问题
i saw this project in previous answer and I tried to run it but it didn't how to pass data from parsed text file and insert the values to ObservableList in javafx?
data inputted from text file to table view and then piechart JAVAFX, everything was work except the pie chart I am trying to get data from table view to pie chart, i have done after few edits I can't run it anymore
the problem in ObservableList pieChartData = FXCollections .observableArrayList()
this is the code
package show;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import javafx.application.Application;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TableView.TableViewSelectionModel;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class show_TableView extends Application {
public TableView < Metrics > tableView = new TableView<Metrics>();
private ObservableList< Metrics > dataList = FXCollections.observableArrayList(
// /do something like this new Metrics(name,WMC,DIT,NOC ,CBO,RFC,LCOM , Ce, NPM),
// i want to add Metrics ADDED DYNAMICALLY after file is parsed
);
ObservableList<PieChart.Data> pieChartData = FXCollections
.observableArrayList(
new PieChart.Data("CBO", m.getCBO()),
new PieChart.Data("Ce", m.getCe()),
new PieChart.Data("DIT", m.getDIT()),
new PieChart.Data("LCOM", m.getLCOM()),
new PieChart.Data("NOC", m.getNOC()),
new PieChart.Data("NPM", m.getNPM()),
new PieChart.Data("WMC", m.getWMC()));
c.setData(pieChartData);
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("java-buddy.blogspot.com");
Group root = new Group();
TableColumn name = new TableColumn("name");
name.setCellValueFactory(new PropertyValueFactory<Metrics, String>(
"name"));
TableColumn WMCCol = new TableColumn("WMC");
WMCCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"WMC"));
TableColumn DITCol = new TableColumn("DIT");
DITCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"DIT"));
TableColumn NOCCol = new TableColumn("NOC");
NOCCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"NOC"));
TableColumn CBOCol = new TableColumn("CBO");
CBOCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"CBO"));
TableColumn RFCCol = new TableColumn("RFC");
RFCCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"RFC"));
TableColumn LCOMCol = new TableColumn("LCOM");
LCOMCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"LCOM"));
TableColumn ceCol = new TableColumn("Ca");
ceCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"ce"));
TableColumn NPMCol = new TableColumn("NPM");
NPMCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"NPM"));
primaryStage.setScene(new Scene(root, 200, 200));
primaryStage.show();
List<Metrics> metric = readMetricFromCSV("C:\\Users\\pavi\\Desktop\\11.txt");
// let's print all the metric read from CSV file
for (Metrics m : metric) {
System.out.println(m);
}
tableView.setItems(FXCollections.observableArrayList(metric));
tableView.getColumns().addAll(name, WMCCol, DITCol, NOCCol, CBOCol,
RFCCol, LCOMCol, ceCol, NPMCol);
VBox vBox = new VBox();
vBox.setMaxSize(600, 600);
vBox.setSpacing(10);
PieChart c = new PieChart();
tableView.setOnMouseClicked(new EventHandler<Event>() {
@Override
public void handle(Event event) {
c.setData(FXCollections.emptyObservableList());
TableViewSelectionModel<Metrics> tableViewSelectionModel = tableView
.selectionModelProperty().get();
Metrics m = tableViewSelectionModel.getSelectedItem();
if(m==null){
return;
}
ObservableList<PieChart.Data> pieChartData = FXCollections
.observableArrayList(
new PieChart.Data("CBO", m.getCBO()),
new PieChart.Data("Ce", m.getCe()),
new PieChart.Data("DIT", m.getDIT()),
new PieChart.Data("LCOM", m.getLCOM()),
new PieChart.Data("NOC", m.getNOC()),
new PieChart.Data("NPM", m.getNPM()),
new PieChart.Data("WMC", m.getWMC()));
c.setData(pieChartData);
}
});
vBox.getChildren().add(tableView);
vBox.getChildren().add(c);
root.getChildren().add(vBox);
}
public List<Metrics> readMetricFromCSV(String fileName) {
List<Metrics> metricsss = new ArrayList<>();
Path pathToFile = Paths.get(fileName);
// create an instance of BufferedReader
// using try with resource, Java 7 feature to close resources
try (BufferedReader br = Files.newBufferedReader(pathToFile,
StandardCharsets.US_ASCII)) {
// read the first line from the text file
String line = br.readLine();
while (line != null && !line.isEmpty()) { // loop until all lines
// are read
String[] attributes = line.split(" "); // the file, using a
// comma as the
// delimiter
Metrics valueOfMetric = createMetric(attributes);
metricsss.add(valueOfMetric); // adding metric into ArrayList
// skip empty line
// line.isEmpty() || line.trim().equals("") ||
// line.trim().equals("\n"))
br.readLine();
line = br.readLine();
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
return metricsss;
}
private Metrics createMetric(String[] metadata) {
String name = metadata[0];
int WMC = Integer.parseInt(metadata[1]);
int DIT = Integer.parseInt(metadata[2]);
int NOC = Integer.parseInt(metadata[3]);
int CBO = Integer.parseInt(metadata[4]);
int RFC = Integer.parseInt(metadata[5]);
int LCOM= Integer.parseInt(metadata[6]);
int Ce = Integer.parseInt(metadata[7]);
int NPM = Integer.parseInt(metadata[8]);
return new Metrics(name,WMC,DIT,NOC,CBO,RFC,LCOM,Ce,NPM);//,cc
}
public class Metrics {
private String name;
private int WMC;
private int DIT;
private int NOC;
private int CBO;
private int RFC;
private int LCOM;
private int Ce;
private int NPM;
public Metrics( String name,int WMC,int DIT,int NOC,int CBO,int RFC,int LCOM, int Ce, int NPM) {
this.name = name;
this.WMC = WMC;
this.DIT = DIT;
this.NOC = NOC;
this.CBO = CBO;
this.RFC = RFC;
this.LCOM = LCOM;
this.Ce = Ce;
this.NPM = NPM;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getWMC() {
return WMC;
}
public void setWMC(int WMC) {
this.WMC = WMC;
}
public int getDIT() {
return DIT;
}
public void setDIT(int DIT) {
this.DIT = DIT;
}
public int getNOC() {
return NOC;
}
public void setNOC(int NOC) {
this.NOC = NOC;
}
public int getCBO() {
return CBO;
}
public void setCBO(int CBO) {
this.CBO = CBO;
}
public int getRFC() {
return RFC;
}
public void setRFC(int RFC) {
this.RFC = RFC;
}
public int getLCOM() {
return LCOM;
}
public void setLCOM(int LCOM) {
this.LCOM = LCOM;
}
public int getCe() {
return Ce;
}
public void setCe(int ce) {
Ce = ce;
}
public int getNPM() {
return NPM;
}
public void setNPM(int NPM) {
this.NPM = NPM;
}
}
}
text file content
gr.spinellis.ckjm.ClassVisitor 13 2 0 14 74 34 2 9
gr.spinellis.ckjm.ClassMetricsContainer 3 1 0 3 18 0 2 2
gr.spinellis.ckjm.MetricsFilter 7 1 0 6 30 11 2 5
gr.spinellis.ckjm.PrintPlainResults 2 1 0 2 8 0 1 2
gr.spinellis.ckjm.MethodVisitor 11 2 0 21 40 0 1 8
gr.spinellis.ckjm.CkjmOutputHandler 1 1 0 1 1 0 3 1
回答1:
No Problem with ObservableList pieChartData = FXCollections .observableArrayList() this is an empty arryList.
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("java-buddy.blogspot.com");
VBox root = new VBox();
TableColumn name = new TableColumn("name");
name.setCellValueFactory(new PropertyValueFactory<Metrics, String>(
"name"));
TableColumn WMCCol = new TableColumn("WMC");
WMCCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"WMC"));
TableColumn DITCol = new TableColumn("DIT");
DITCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"DIT"));
TableColumn NOCCol = new TableColumn("NOC");
NOCCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"NOC"));
TableColumn CBOCol = new TableColumn("CBO");
CBOCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"CBO"));
TableColumn RFCCol = new TableColumn("RFC");
RFCCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"RFC"));
TableColumn LCOMCol = new TableColumn("LCOM");
LCOMCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"LCOM"));
TableColumn ceCol = new TableColumn("Ca");
ceCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"ce"));
TableColumn NPMCol = new TableColumn("NPM");
NPMCol.setCellValueFactory(new PropertyValueFactory<Metrics, Double>(
"NPM"));
primaryStage.setScene(new Scene(root));
primaryStage.show();
List<Metrics> metric = readMetricFromCSV("C:\\Users\\pavi\\Desktop\\11.txt");
// let's print all the metric read from CSV file
for (Metrics m : metric) {
System.out.println(m);
}
tableView.setItems(FXCollections.observableArrayList(metric));
tableView.getColumns().addAll(name, WMCCol, DITCol, NOCCol, CBOCol,
RFCCol, LCOMCol, ceCol, NPMCol);
VBox vBox = new VBox();
vBox.setSpacing(10);
PieChart c = new PieChart();
tableView.setOnMouseClicked(new EventHandler<Event>() {
@Override
public void handle(Event event) {
c.setData(FXCollections.emptyObservableList());
TableViewSelectionModel<Metrics> tableViewSelectionModel = tableView
.selectionModelProperty().get();
Metrics m = tableViewSelectionModel.getSelectedItem();
if (m == null) {
return;
}
ObservableList<PieChart.Data> pieChartData = FXCollections
.observableArrayList(
new PieChart.Data("CBO", m.getCBO()),
new PieChart.Data("Ce", m.getCe()),
new PieChart.Data("DIT", m.getDIT()),
new PieChart.Data("LCOM", m.getLCOM()),
new PieChart.Data("NOC", m.getNOC()),
new PieChart.Data("NPM", m.getNPM()),
new PieChart.Data("WMC", m.getWMC()));
c.setData(pieChartData);
}
});
HBox boxc = new HBox();
vBox.prefWidthProperty().bind(root.prefWidthProperty());
boxc.setManaged(true);
boxc.getChildren().addAll(tableView, c);
vBox.getChildren().add(boxc);
root.getChildren().add(vBox);
}
i hope this will solve your problem
来源:https://stackoverflow.com/questions/32858244/no-error-then-why-observablelist-is-not-working-in-this-project