没有错误,那么为什么 ObservableList 在这个项目中不起作用?
no error then why ObservableList is not working in this project?
我在之前的回答中看到了这个项目,我尝试 运行 但没有成功
数据从文本文件输入到 table 视图,然后是 JAVAFX 饼图,除饼图外一切正常 我正在尝试从 table 视图获取数据到饼图,我已经完成了一些编辑我不能 运行 它了
ObservableList pieChartData = FXCollections 中的问题
.observableArrayList()
这是代码
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;
}
}
}
文本文件内容
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
ObservableList 没有问题 pieChartData = FXCollections .observableArrayList() 这是一个空的 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);
}
我希望这能解决你的问题
我在之前的回答中看到了这个项目,我尝试 运行 但没有成功
数据从文本文件输入到 table 视图,然后是 JAVAFX 饼图,除饼图外一切正常 我正在尝试从 table 视图获取数据到饼图,我已经完成了一些编辑我不能 运行 它了
ObservableList pieChartData = FXCollections 中的问题 .observableArrayList()
这是代码
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;
}
}
}
文本文件内容
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
ObservableList 没有问题 pieChartData = FXCollections .observableArrayList() 这是一个空的 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);
}
我希望这能解决你的问题