IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Rendre mon code plus OO et plus propre


Sujet :

avec Java

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2017
    Messages : 13
    Par défaut Rendre mon code plus OO et plus propre
    Bonjour,

    Je viens glaner quelques informations qui me font cruellement défaut.
    J'ai commencé mon premier projet Java professionnel qui consiste en un logiciel de Statistiques alimenté par des BDD et des fichiers Excel.
    J'ai choisi ce langage du fait de la mixité PC / Mac, et j'avais tellement de mal à faire évoluer graphiquement mon logiciel au fur et à mesure des ajouts de fonctionnalités que j'ai recommencé en utilisant JavaFX.

    J'ai crée une page en particulier qui fonctionne bien, qui prend les valeurs contenues dans des combo, et passe à travers une série de conditions afin de générer un graphique à partir de 3 tableaux Excel.
    Ceci dit, je me suis rendu compte au fur et à mesure en écrivant les actions de ce bouton, qu'il exécutait à lui seul 300 lignes de code, et presque autant de conditions, sans jamais faire appel à une seule autre classe. Cela m'a un peu semblé contraire à tout ce que j'ai appris sur le langage Java, et sur le développement Orienté Objet en général.

    J'ai donc essayé, avec beaucoup de mal, de définir mes objets, de créer les classes correspondantes et de leur attribuer des actions bien spécifiques, seulement au stade où j'en suis, ma page ne compile plus, et bien que le problème me semble être en vérité ma créativité et mon imagination, j'ai du mal à faire le lien entre les différentes classes.

    Voici comment j'ai, naturellement, crée ma page ainsi que ses fonctionnalités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
     
    public class StatistiquesSI implements Initializable {
     
        // Instances de classes
        Strings strings = new Strings();
     
        // Instances des objets FXML
        @FXML
        private JFXHamburger hamburger;
        @FXML
        private JFXDrawer drawer;
        @FXML
        private JFXComboBox comboCentre;
        @FXML
        private JFXComboBox comboPeriode;
        @FXML
        private JFXComboBox comboIndic;
        @FXML
        private JFXComboBox comboYear;
        @FXML
        private PieChart roundGraph;
        @FXML
        private JFXButton generateButton;
     
        // Variables de classe
        String fileNameA = "";
        String fileNameB = "";
        String fileNameC = "";
        int selectedSheet = 0;
        String selectedColumn = "";
        int selectedRow = 0;
        int selectedRow2 = 0;
        int selectedRow3 = 0;
        int selectedRow4 = 0;
        int selectedRow5 = 0;
        int selectedRow6 = 0;
        Cell cell = null;
        Cell cell2 = null;
        Cell cell3 = null;
        Cell cell4 = null;
        Cell cell5 = null;
        Cell cell6 = null;
        double from1 = 0;
        double from2 = 0;
        double from3 = 0;
        double from4 = 0;
        double from5 = 0;
        double from6 = 0;
        boolean withGraphic = false;
        ObservableList<PieChart.Data> pieChartData;
     
    // ...
     
            // COMBOBOX
            comboYear.setItems(strings.yearList);
            comboCentre.setItems(strings.centerList);
            comboIndic.setItems(strings.indicList);
            comboPeriode.setItems(strings.periodList);
     
    // GENERATE BUTTON
            generateButton.addEventHandler(MouseEvent.MOUSE_CLICKED, (e) -> {
     
                // RECUPERATION DES ITEMS DANS COMBO
                int compareYear = (int) comboYear.getValue();
                if (compareYear == 2017) {
                    fileNameA = "P:/PROVINCE et statistiques FASD/Namur 2017.xls";
                    fileNameB = "P:/PROVINCE et statistiques FASD/Données Namur 2017.xls";
                    fileNameC = "P:/PROVINCE et statistiques FASD/Suivi pers. CJB Namur 2017.xls";
                } else if (compareYear == 2016){
                    fileNameA = "P:/PROVINCE et statistiques FASD/Namur 2016.xls";
                    fileNameB = "P:/PROVINCE et statistiques FASD/Données Namur 2016.xls";
                    fileNameC = "P:/PROVINCE et statistiques FASD/Suivi pers. CJB Namur 2016.xls";
                }else{
                    System.out.println("Année introuvable");
                }
                String compareCentre = comboCentre.getValue().toString();
                if (compareCentre == "Global") {
                    selectedSheet = 5;
                } else if (compareCentre == "Namur") {
                    selectedSheet = 4;
                } else if (compareCentre == "Philippeville") {
                    selectedSheet = 0;
                } else if (compareCentre == "Ciney") {
                    selectedSheet = 1;
                } else if (compareCentre == "Gedinne") {
                    selectedSheet = 2;
                } else if (compareCentre == "Eghezée") {
                    selectedSheet = 3;
                } else {
                    System.out.println("Le centre n'existe pas");
                }
                String comparePeriode = comboPeriode.getValue().toString();
                if (comparePeriode == "Janvier") {
                    selectedColumn = "D";
                } else if (comparePeriode == "Février") {
                    selectedColumn = "E";
                } else {
                    System.out.println("Période pas encore implementée");
                }
                String compareIndic = comboIndic.getValue().toString();
                if (compareIndic == "Total jours payés") {
                    selectedRow = 6;
                    selectedRow2 = 7;
                    selectedRow3 = 8;
                    selectedRow4 = 9;
                    withGraphic = true;
                } else if (compareIndic == "Total jours prestés Infirmières") {
                    selectedRow = 11;
                    selectedRow2 = 12;
                    selectedRow3 = 13;
                    withGraphic = false;
                } else {
                    System.out.println("Indicateur pas encore implementé");
                }
     
                try {
                    Workbook wb = WorkbookFactory.create(new File(fileNameA));
                    Workbook wb2 = WorkbookFactory.create(new File(fileNameB));
                    Workbook wb3 = WorkbookFactory.create(new File(fileNameC));
                    HSSFFormulaEvaluator evaluator = (HSSFFormulaEvaluator) wb.getCreationHelper().createFormulaEvaluator();
                    HSSFFormulaEvaluator evaluator2 = (HSSFFormulaEvaluator) wb2.getCreationHelper().createFormulaEvaluator();
                    HSSFFormulaEvaluator evaluator3 = (HSSFFormulaEvaluator) wb3.getCreationHelper().createFormulaEvaluator();
                    String[] workbookNames = {"Namur 2017.xls", "Données Namur 2017.xls", "Suivi pers. CJB Namur 2017.xls"};
                    HSSFFormulaEvaluator[] evaluators = {evaluator, evaluator2, evaluator3};
                    HSSFFormulaEvaluator.setupEnvironment(workbookNames, evaluators);
                    Sheet sheet = wb.getSheetAt(selectedSheet);
                    CellReference cellReference = new CellReference(selectedColumn + selectedRow);
                    Row row = sheet.getRow(cellReference.getRow());
                    cell = row.getCell(cellReference.getCol());
                    if (selectedRow2 != 0) {
                        CellReference cellReference2 = new CellReference(selectedColumn + selectedRow2);
                        Row row2 = sheet.getRow(cellReference2.getRow());
                        cell2 = row2.getCell(cellReference2.getCol());
                    }
                    if (selectedRow3 != 0) {
                        CellReference cellReference3 = new CellReference(selectedColumn + selectedRow3);
                        Row row3 = sheet.getRow(cellReference3.getRow());
                        cell3 = row3.getCell(cellReference3.getCol());
                    }
                    if (selectedRow4 != 0) {
                        CellReference cellReference4 = new CellReference(selectedColumn + selectedRow4);
                        Row row4 = sheet.getRow(cellReference4.getRow());
                        cell4 = row4.getCell(cellReference4.getCol());
                    }
                    if (selectedRow5 != 0) {
                        CellReference cellReference5 = new CellReference(selectedColumn + selectedRow5);
                        Row row5 = sheet.getRow(cellReference5.getRow());
                        cell5 = row5.getCell(cellReference5.getCol());
                    }
                    if (selectedRow6 != 0) {
                        CellReference cellReference6 = new CellReference(selectedColumn + selectedRow6);
                        Row row6 = sheet.getRow(cellReference6.getRow());
                        cell6 = row6.getCell(cellReference6.getCol());
                    }
                    if (cell != null) {
                        from1 = cell.getNumericCellValue();
                        switch (evaluator.evaluateFormulaCell(cell)) {
                            case Cell.CELL_TYPE_BOOLEAN:
                                System.out.println(cell.getBooleanCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println(cell.getNumericCellValue());
                                break;
                            case Cell.CELL_TYPE_STRING:
                                System.out.println(cell.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_BLANK:
                                break;
                            case Cell.CELL_TYPE_ERROR:
                                System.out.println(cell.getErrorCellValue());
                                break;
                            case Cell.CELL_TYPE_FORMULA:
                                break;
                        }
                    }
                    if (cell2 != null) {
                        from2 = cell2.getNumericCellValue();
                        switch (evaluator.evaluateFormulaCell(cell2)) {
                            case Cell.CELL_TYPE_BOOLEAN:
                                System.out.println(cell2.getBooleanCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println(cell2.getNumericCellValue());
                                break;
                            case Cell.CELL_TYPE_STRING:
                                System.out.println(cell2.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_BLANK:
                                break;
                            case Cell.CELL_TYPE_ERROR:
                                System.out.println(cell2.getErrorCellValue());
                                break;
                            case Cell.CELL_TYPE_FORMULA:
                                break;
                        }
                    }
                    if (cell3 != null) {
                        from3 = cell3.getNumericCellValue();
                        switch (evaluator.evaluateFormulaCell(cell3)) {
                            case Cell.CELL_TYPE_BOOLEAN:
                                System.out.println(cell3.getBooleanCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println(cell3.getNumericCellValue());
                                break;
                            case Cell.CELL_TYPE_STRING:
                                System.out.println(cell3.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_BLANK:
                                break;
                            case Cell.CELL_TYPE_ERROR:
                                System.out.println(cell3.getErrorCellValue());
                                break;
                            case Cell.CELL_TYPE_FORMULA:
                                break;
                        }
                    }
                    if (cell4 != null) {
                        from4 = cell4.getNumericCellValue();
                        switch (evaluator.evaluateFormulaCell(cell4)) {
                            case Cell.CELL_TYPE_BOOLEAN:
                                System.out.println(cell4.getBooleanCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println(cell4.getNumericCellValue());
                                break;
                            case Cell.CELL_TYPE_STRING:
                                System.out.println(cell4.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_BLANK:
                                break;
                            case Cell.CELL_TYPE_ERROR:
                                System.out.println(cell4.getErrorCellValue());
                                break;
                            case Cell.CELL_TYPE_FORMULA:
                                break;
                        }
                    }
                    if (cell5 != null) {
                        from5 = cell5.getNumericCellValue();
                        switch (evaluator.evaluateFormulaCell(cell5)) {
                            case Cell.CELL_TYPE_BOOLEAN:
                                System.out.println(cell5.getBooleanCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println(cell5.getNumericCellValue());
                                break;
                            case Cell.CELL_TYPE_STRING:
                                System.out.println(cell5.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_BLANK:
                                break;
                            case Cell.CELL_TYPE_ERROR:
                                System.out.println(cell5.getErrorCellValue());
                                break;
                            case Cell.CELL_TYPE_FORMULA:
                                break;
                        }
                    }
                    if (cell6 != null) {
                        from6 = cell6.getNumericCellValue();
                        switch (evaluator.evaluateFormulaCell(cell6)) {
                            case Cell.CELL_TYPE_BOOLEAN:
                                System.out.println(cell6.getBooleanCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println(cell6.getNumericCellValue());
                                break;
                            case Cell.CELL_TYPE_STRING:
                                System.out.println(cell6.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_BLANK:
                                break;
                            case Cell.CELL_TYPE_ERROR:
                                System.out.println(cell6.getErrorCellValue());
                                break;
                            case Cell.CELL_TYPE_FORMULA:
                                break;
                        }
                    }
                    // MISE EN FROMAGE
                    if (withGraphic == true) {
                        pieChartData = FXCollections.observableArrayList(
                                new PieChart.Data("Test 2", from2),
                                new PieChart.Data("Test 3", from3),
                                new PieChart.Data("Test 3", from4),
                                new PieChart.Data("Test 3", from5)
                        );
                        roundGraph.setData(pieChartData);
                        roundGraph.setStartAngle(90);
                    }else{
                        pieChartData.clear();
                    }
     
                    // VIDAGE MEMOIRE
                    cell = null;
                    cell2 = null;
                    cell3 = null;
                    cell4 = null;
                    cell5 = null;
                    cell6 = null;
                    selectedRow = 0;
                    selectedRow2 = 0;
                    selectedRow3 = 0;
                    selectedRow4 = 0;
                    selectedRow5 = 0;
                    selectedRow6 = 0;
                    wb.close();
                    wb2.close();
                    wb3.close();
     
                } catch (IOException e1) {
                    e1.printStackTrace();
                } catch (InvalidFormatException e1) {
                    e1.printStackTrace();
                }
            });
        }
    Je n'ai mis que la partie du code gérée par le bouton generateButton, mais j'avoue que moi-même je m'y perds un peu, je mets plusieurs secondes pour retrouver la ligne dont j'ai besoin, et surtout j'ai de plus en plus de mal à ajouter des fonctionnalités de tri par exemple, sans multiplier les conditions, sans compter que ma façon de faire me bloquera sans doute à un moment donné.

    J'ai donc décider d'arrêter d'avancer dans le projet, et de le rendre plus propre, car étant mon premier projet, c'est ici que je dois commencer les bonnes habitudes si je ne veux pas que tous mes futurs projets se retrouvent aussi sales à chaque fois.
    J'ai alors commencé avec le contenu de la comboYear, imaginant que les années étaient donc des objets. J'ai crée la classe Year, et essayé de basculer tout le code en rapport avec les années. Voici le résultat :

    CLASSE YEAR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    package com;
     
    public class Year {
     
        private int year;
        public String filePathA;
        public String filePathB;
        public String filePathC;
        public String fileNameA;
        public String fileNameB;
        public String fileNameC;
     
        public Year (){
            year = 0;
        }
        public Year (int year){
            this.year = year;
        }
     
        public int getYear(){
            return year;
        }
     
        public void setYear(int year){
            this.year = year;
        }
     
        public void toPath(){
            if (year == 2017){
                filePathA = "P:/PROVINCE et statistiques FASD/";
                fileNameA = "Namur 2017.xls";
                filePathB = "P:/PROVINCE et statistiques FASD/";
                fileNameB = "Données Namur 2017.xls";
                filePathC = "P:/PROVINCE et statistiques FASD/";
                fileNameC = "Suivi pers. CJB Namur 2017.xls";
            }
        }
     
        public String getFilePathA(){
            return filePathA;
        }
        public String getFileNameA(){
            return fileNameA;
        }
    }
    Et voici le code du boutton maintenant, qui n'est qu'un peu raccourci mais ce serait un bon début :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
     
    public class StatistiquesSI implements Initializable {
     
        // Instances de classes
        Strings strings = new Strings();
     
        // Instances des objets fxml
        @FXML
        private JFXHamburger hamburger;
        @FXML
        private JFXDrawer drawer;
        @FXML
        private JFXComboBox comboCentre;
        @FXML
        private JFXComboBox comboPeriode;
        @FXML
        private JFXComboBox comboIndic;
        @FXML
        private JFXComboBox comboYear;
        @FXML
        private PieChart roundGraph;
        @FXML
        private JFXButton generateButton;
     
        // Variables de classe
        int selectedSheet = 0;
        String selectedColumn = "";
        int selectedRow = 0;
        int selectedRow2 = 0;
        int selectedRow3 = 0;
        int selectedRow4 = 0;
        int selectedRow5 = 0;
        int selectedRow6 = 0;
        Cell cell = null;
        Cell cell2 = null;
        Cell cell3 = null;
        Cell cell4 = null;
        Cell cell5 = null;
        Cell cell6 = null;
        double from1 = 0;
        double from2 = 0;
        double from3 = 0;
        double from4 = 0;
        double from5 = 0;
        double from6 = 0;
        boolean withGraphic = false;
        ObservableList<PieChart.Data> pieChartData;
     
    // ...
     
          // COMBOBOX
            comboYear.setItems(strings.yearList);
            comboCentre.setItems(strings.centerList);
            comboIndic.setItems(strings.indicList);
            comboPeriode.setItems(strings.periodList);
     
            // GENERATE BUTTON
            generateButton.addEventHandler(MouseEvent.MOUSE_CLICKED, (e) -> {
     
                // RECUPERATION DES ITEMS DANS COMBO
                Year year = new Year((Integer)comboYear.getValue());
                year.toPath();
     
                String compareCentre = comboCentre.getValue().toString();
                if (compareCentre == "Global") {
                    selectedSheet = 5;
                } else if (compareCentre == "Namur") {
                    selectedSheet = 4;
                } else if (compareCentre == "Philippeville") {
                    selectedSheet = 0;
                } else if (compareCentre == "Ciney") {
                    selectedSheet = 1;
                } else if (compareCentre == "Gedinne") {
                    selectedSheet = 2;
                } else if (compareCentre == "Eghezée") {
                    selectedSheet = 3;
                } else {
                    System.out.println("Le centre n'existe pas");
                }
                String comparePeriode = comboPeriode.getValue().toString();
                if (comparePeriode == "Janvier") {
                    selectedColumn = "D";
                } else if (comparePeriode == "Février") {
                    selectedColumn = "E";
                } else {
                    System.out.println("Période pas encore implementée");
                }
                String compareIndic = comboIndic.getValue().toString();
                if (compareIndic == "Total jours payés") {
                    selectedRow = 6;
                    selectedRow2 = 7;
                    selectedRow3 = 8;
                    selectedRow4 = 9;
                    withGraphic = true;
                } else if (compareIndic == "Total jours prestés Infirmières") {
                    selectedRow = 11;
                    selectedRow2 = 12;
                    selectedRow3 = 13;
                    withGraphic = false;
                } else {
                    System.out.println("Indicateur pas encore implementé");
                }
     
                try {
                    Workbook wb = WorkbookFactory.create(new File(year.filePathA+year.fileNameA);
                    Workbook wb2 = WorkbookFactory.create(new File(year.filePathB+year.fileNameB));
                    Workbook wb3 = WorkbookFactory.create(new File(year.filePathC+year.fileNameC));
                    HSSFFormulaEvaluator evaluator = (HSSFFormulaEvaluator) wb.getCreationHelper().createFormulaEvaluator();
                    HSSFFormulaEvaluator evaluator2 = (HSSFFormulaEvaluator) wb2.getCreationHelper().createFormulaEvaluator();
                    HSSFFormulaEvaluator evaluator3 = (HSSFFormulaEvaluator) wb3.getCreationHelper().createFormulaEvaluator();
                    String[] workbookNames = {year.fileNameA, year.fileNameB, year.fileNameC};
                    HSSFFormulaEvaluator[] evaluators = {evaluator, evaluator2, evaluator3};
                    HSSFFormulaEvaluator.setupEnvironment(workbookNames, evaluators);
                    Sheet sheet = wb.getSheetAt(selectedSheet);
                    CellReference cellReference = new CellReference(selectedColumn + selectedRow);
                    Row row = sheet.getRow(cellReference.getRow());
                    cell = row.getCell(cellReference.getCol());
                    if (selectedRow2 != 0) {
                        CellReference cellReference2 = new CellReference(selectedColumn + selectedRow2);
                        Row row2 = sheet.getRow(cellReference2.getRow());
                        cell2 = row2.getCell(cellReference2.getCol());
                    }
                    if (selectedRow3 != 0) {
                        CellReference cellReference3 = new CellReference(selectedColumn + selectedRow3);
                        Row row3 = sheet.getRow(cellReference3.getRow());
                        cell3 = row3.getCell(cellReference3.getCol());
                    }
                    if (selectedRow4 != 0) {
                        CellReference cellReference4 = new CellReference(selectedColumn + selectedRow4);
                        Row row4 = sheet.getRow(cellReference4.getRow());
                        cell4 = row4.getCell(cellReference4.getCol());
                    }
                    if (selectedRow5 != 0) {
                        CellReference cellReference5 = new CellReference(selectedColumn + selectedRow5);
                        Row row5 = sheet.getRow(cellReference5.getRow());
                        cell5 = row5.getCell(cellReference5.getCol());
                    }
                    if (selectedRow6 != 0) {
                        CellReference cellReference6 = new CellReference(selectedColumn + selectedRow6);
                        Row row6 = sheet.getRow(cellReference6.getRow());
                        cell6 = row6.getCell(cellReference6.getCol());
                    }
                    if (cell != null) {
                        from1 = cell.getNumericCellValue();
                        switch (evaluator.evaluateFormulaCell(cell)) {
                            case Cell.CELL_TYPE_BOOLEAN:
                                System.out.println(cell.getBooleanCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println(cell.getNumericCellValue());
                                break;
                            case Cell.CELL_TYPE_STRING:
                                System.out.println(cell.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_BLANK:
                                break;
                            case Cell.CELL_TYPE_ERROR:
                                System.out.println(cell.getErrorCellValue());
                                break;
                            case Cell.CELL_TYPE_FORMULA:
                                break;
                        }
                    }
                    if (cell2 != null) {
                        from2 = cell2.getNumericCellValue();
                        switch (evaluator.evaluateFormulaCell(cell2)) {
                            case Cell.CELL_TYPE_BOOLEAN:
                                System.out.println(cell2.getBooleanCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println(cell2.getNumericCellValue());
                                break;
                            case Cell.CELL_TYPE_STRING:
                                System.out.println(cell2.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_BLANK:
                                break;
                            case Cell.CELL_TYPE_ERROR:
                                System.out.println(cell2.getErrorCellValue());
                                break;
                            case Cell.CELL_TYPE_FORMULA:
                                break;
                        }
                    }
                    if (cell3 != null) {
                        from3 = cell3.getNumericCellValue();
                        switch (evaluator.evaluateFormulaCell(cell3)) {
                            case Cell.CELL_TYPE_BOOLEAN:
                                System.out.println(cell3.getBooleanCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println(cell3.getNumericCellValue());
                                break;
                            case Cell.CELL_TYPE_STRING:
                                System.out.println(cell3.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_BLANK:
                                break;
                            case Cell.CELL_TYPE_ERROR:
                                System.out.println(cell3.getErrorCellValue());
                                break;
                            case Cell.CELL_TYPE_FORMULA:
                                break;
                        }
                    }
                    if (cell4 != null) {
                        from4 = cell4.getNumericCellValue();
                        switch (evaluator.evaluateFormulaCell(cell4)) {
                            case Cell.CELL_TYPE_BOOLEAN:
                                System.out.println(cell4.getBooleanCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println(cell4.getNumericCellValue());
                                break;
                            case Cell.CELL_TYPE_STRING:
                                System.out.println(cell4.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_BLANK:
                                break;
                            case Cell.CELL_TYPE_ERROR:
                                System.out.println(cell4.getErrorCellValue());
                                break;
                            case Cell.CELL_TYPE_FORMULA:
                                break;
                        }
                    }
                    if (cell5 != null) {
                        from5 = cell5.getNumericCellValue();
                        switch (evaluator.evaluateFormulaCell(cell5)) {
                            case Cell.CELL_TYPE_BOOLEAN:
                                System.out.println(cell5.getBooleanCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println(cell5.getNumericCellValue());
                                break;
                            case Cell.CELL_TYPE_STRING:
                                System.out.println(cell5.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_BLANK:
                                break;
                            case Cell.CELL_TYPE_ERROR:
                                System.out.println(cell5.getErrorCellValue());
                                break;
                            case Cell.CELL_TYPE_FORMULA:
                                break;
                        }
                    }
                    if (cell6 != null) {
                        from6 = cell6.getNumericCellValue();
                        switch (evaluator.evaluateFormulaCell(cell6)) {
                            case Cell.CELL_TYPE_BOOLEAN:
                                System.out.println(cell6.getBooleanCellValue());
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                System.out.println(cell6.getNumericCellValue());
                                break;
                            case Cell.CELL_TYPE_STRING:
                                System.out.println(cell6.getStringCellValue());
                                break;
                            case Cell.CELL_TYPE_BLANK:
                                break;
                            case Cell.CELL_TYPE_ERROR:
                                System.out.println(cell6.getErrorCellValue());
                                break;
                            case Cell.CELL_TYPE_FORMULA:
                                break;
                        }
                    }
                    // MISE EN FROMAGE
                    if (withGraphic == true) {
                        pieChartData = FXCollections.observableArrayList(
                                new PieChart.Data("Test 2", from2),
                                new PieChart.Data("Test 3", from3),
                                new PieChart.Data("Test 3", from4),
                                new PieChart.Data("Test 3", from5)
                        );
                        roundGraph.setData(pieChartData);
                        roundGraph.setStartAngle(90);
                    }else{
                        pieChartData.clear();
                    }
     
                    // VIDAGE MEMOIRE
                    cell = null;
                    cell2 = null;
                    cell3 = null;
                    cell4 = null;
                    cell5 = null;
                    cell6 = null;
                    selectedRow = 0;
                    selectedRow2 = 0;
                    selectedRow3 = 0;
                    selectedRow4 = 0;
                    selectedRow5 = 0;
                    selectedRow6 = 0;
                    wb.close();
                    wb2.close();
                    wb3.close();
     
                } catch (IOException e1) {
                    e1.printStackTrace();
                } catch (InvalidFormatException e1) {
                    e1.printStackTrace();
                }
            });
        }
     
    }
    Evidemment ça ne compile pas car les chemins de fichiers dans les Workbooks sont vides, et je n'arrive pas à les récupérer à partir de la nouvelle classe Year. J'ai essayé en créant des getters, ou sans, mais ça n'a pas l'air d'être la solution.

    Si quelqu'un pouvait m'éclairer, ainsi qu'éventuellement me donner des conseils pour peut-être raccourcir mes instructions, ou comment faire plus facilement cerner mes objets, car je me rends bien compte que mon code est inutilement lourd, par exemple ma façon de tester si les cellules contiennent des données à mettre dans le graphiques me semble vraiment mauvaise, mais j'ai vraiment du mal à le corriger.

    D'avance un tout grand merci !

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Compiler ? Exécuter tu veux dire plutôt, non ? Car si c’était une erreur de compilation ça devrait être plutôt simple a repérer.

    Hum, tu sembles avoir beaucoup de regles ecrite en dur ici et la dans ton code. N'est-il pas possible d'externaliser tout cela et de rendre les regles de ton programme beaucoup plus generique ?

    Sans aller jusqu'a utiliser une base de donnees (tu y viendras peut-etre par la suite), un simple fichier property contenant des choses dans le genre :

    Code Properties : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    years=2017
    year.2017.filePathA=P:\\PROVINCE et statistiques FASD\\
    year.2017.fileNameA=Namur 2017.xls
    year.2017.fileNameB=P:\\PROVINCE et statistiques FASD\\
    year.2017.fileNameC=Données Namur 2017.xls
    year.2017.filePathB=P:\\PROVINCE et statistiques FASD\\
    year.2017.filePathC=Suivi pers. CJB Namur 2017.xls
    centres=Global, Namur, Philippeville, Ciney, Gedinne, Eghezée
    centre.Global.selectedCentre=5
    centre.Namur.selectedCentre=4
    centre.Philippeville.selectedCentre=0
    centre.Ciney.selectedCentre=1
    centre.Gedinne.selectedCentre=2
    centre.Eghezée.selectedCentre=3
    periods=Janvier, Février
    periods.Janvier.selectedColumn=D
    periods.Février.selectedColumn=E

    Ou des fichiers XML ou JSON si tu veux te lancer dans ce genre de parsing.

    Bref ca reste beaucoup plus simple si tu arrives a externaliser tout ce qui est regles et faire que ton code java se resume betement a un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int year=...
    if (! years.contains(year)) {
       throw new IllegalArguementException(year+" is not good!");
    }
    filePathA = property.get(String.format("year.%d.filePathA ", year));
    fileNameA = property.get(String.format("year.%d.fileNameA", year));
    filePathB = property.get(String.format("year.%d.filePathB", year));
    fileNameB = property.get(String.format("year.%d.fileNameB", year));
    filePathC = property.get(String.format("year.%d.filePathC", year));
    fileNameC = property.get(String.format("year.%d.fileNameC", year));
    Comme ça tu pourras rajouter d'autres années plus tard sans modifier trop ton code.

    Ah vi une question, vu que c'est pas des composants JavaFX standard, si jamais je dois plus tard tenter de faire tourner du code, c'est JFoenix que tu utilises comme toolkit de widgets ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [W3C] Rendre mon code valide au norme W3C
    Par lemirandais dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 01/01/2009, 16h02
  2. Un moyen de rendre mon code plus rapide?
    Par Beluga_71 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/05/2008, 10h36
  3. rendre mon code plus propre
    Par superspike23 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/01/2008, 10h10
  4. [SQL + VB.NET] Alléger mon code pour un accès plus rapide
    Par Miles Raymond dans le forum VB.NET
    Réponses: 8
    Dernier message: 15/10/2007, 23h09
  5. Rendre mon code valide
    Par Bilou44 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 06/01/2007, 12h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo