1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
package application;
import java.text.NumberFormat;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Callback;
public class TableCopyPasteCellsTest extends Application {
private final static ObservableList<Compose> composeList = FXCollections.observableArrayList();
@SuppressWarnings("rawtypes")
private static ObservableList<ObservableList> data;
public static void main(String[] args) {
launch(args);
}
static int minNumberValue; // Variable permettant de connaître le nombre de valeurs de la plus petite série de données affichée dans le tableau
static int maxNumberValue; // Variable permettant de connaître le nombre de valeurs de la plus grande série de données affichée dans le tableau
private static NumberFormat numberFormatter = NumberFormat.getNumberInstance();
@SuppressWarnings({ "unchecked", "rawtypes" })
public void start(Stage stage) {
// Ajout de nouveaux composés tests à la liste data.
composeList.add(new Compose("A"));
composeList.add(new Compose("B"));
// Création du tableau
TableView table = new TableView<>();
table.setPlaceholder(new Text("No content in table"));
data = FXCollections.observableArrayList();
// création des différentes colonnes.
int i=0;
for (Compose p: composeList){
final int j=i;
TableColumn col = new TableColumn(p.getNomCompose());
col.setMinWidth(100);
col.setEditable(true);
col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){
public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {
// On vérifie que l'élément param.getValue().get(j) contient bien une valeur.
// Cela évite les erreurs de type "java.lang.Null Point Exception" dans le cas où les listes n'ont pas les mêmes longueur.
if (param.getValue().get(j) != null){
return new SimpleStringProperty(param.getValue().get(j).toString());
}else {
return new SimpleStringProperty("");
}
}
});
i++;
table.getColumns().addAll(col);
table.setEditable(true);
}
// Calcul du nombre de valeurs min et max contenues dans les séries de données de l'ensemble des composés
minNumberValue = composeList.get(0).getConcentrationComposeList().size();
maxNumberValue = composeList.get(0).getConcentrationComposeList().size();
for (Compose p: composeList){
if (p.getConcentrationComposeList().size()<minNumberValue){
minNumberValue = p.getConcentrationComposeList().size();
}
if (p.getConcentrationComposeList().size()>minNumberValue){
maxNumberValue = p.getConcentrationComposeList().size();
}
}
displayComposeList();
// Ajout des données à la liste ObservableList data
for (int j=0; j<maxNumberValue+1; j++){
ObservableList<String> row = FXCollections.observableArrayList();
row.clear();
for (Compose p: composeList){
if (p.getConcentrationComposeList().size() > j){
row.add(String.valueOf(p.getConcentrationComposeList().get(j).get()));
}else {
row.add(null);
}
}
data.add(row);
}
table.setItems(data);
// test permettant de vérifier si les listes composeList et data sont liées ou non
System.out.println(composeList.get(0).getConcentrationComposeList().get(0));
System.out.println("Modification de la première valeur du tableau dans la liste des composés");
composeList.get(0).getConcentrationComposeList().get(0).set(0);
System.out.println(composeList.get(0).getConcentrationComposeList().get(0));
System.out.println(data);
BorderPane borderPane= new BorderPane();
borderPane.setCenter(table);
Scene scene = new Scene(borderPane);
stage.setScene(scene);
stage.show();
}
private void displayComposeList(){
System.out.println("ComposeList : ");
for (int j=0; j<maxNumberValue; j++){
for (Compose p: composeList){
if (p.getConcentrationComposeList().size() > j){
System.out.print(p.getConcentrationComposeList().get(j).get()+"\t");
}else {
System.out.print("null"+"\t");
}
}
System.out.println("");
}
}
} |
Partager