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

AWT/Swing Java Discussion :

Alimenter un JFrame dynamiquement


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 162
    Par défaut Alimenter un JFrame dynamiquement
    Hello,

    J'ai écrit une classe qui liste des processus d'un système (Essbase).

    Pour cela j'utilise des API et une interface (cf IEssIterator) pour récupérer les éventuels processus en cours (8 colonnes).

    Maintenant j'aurais souhaité intégrer le résultat, la liste des processus en cours, dans une interface graphique, un JFrame par exemple.

    Comment s'y prendre et comme faire simplement. Les exemples trouvés (cf méthode GetRequests()) utilisent très souvent des tableaux d'objets définis en dur (aucun intérêt). D'autres recherches montrent que l'on peut alimenter le JTable via des collections (ArrayList) mais les exemples sont de suite complexes, comprenant moult langage objet, à comprendre vu mon niveau, n'étant pas développeur au premier abord.

    Je n'ai rien tenté à ce stade n'ayant pas compris comment "brancher" le IEssIterator au JTable.

    Merci de vos conseils avisé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
     
    import com.essbase.api.base.EssException;
    import com.essbase.api.base.IEssIterator;
    import com.essbase.api.datasource.IEssOlapRequest;
    import com.essbase.api.datasource.IEssOlapServer;
    import com.essbase.api.domain.IEssDomain;
    import com.essbase.api.session.IEssbase;
    import java.awt.BorderLayout;
    import java.awt.List;
    import java.util.ArrayList;
     
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.SwingUtilities;
     
    /**
     *
     * @author sebroux
     */
    public class GetRequests extends JFrame {
     
        private static String essUsr;
        private static String essPwd;
        private static String essSvr;
        private static String essProvider;
        private static String essApp = "";
        private static String essDb = "";
        private static final int FAILURE_CODE = 1;
     
        public static String getEssApp() {
            return essApp;
        }
     
        public static void setEssApp(String essApp) {
            GetRequests.essApp = essApp;
        }
     
        public static String getessDb() {
            return essDb;
        }
     
        public static void setEssDb(String essDb) {
            GetRequests.essDb = essDb;
        }
     
        public static String getEssPwd() {
            return essPwd;
        }
     
        public static void setEssPwd(String essPwd) {
            GetRequests.essPwd = essPwd;
        }
     
        public static String getEssSvr() {
            return essSvr;
        }
     
        public static void setEssSvr(String essSvr) {
            GetRequests.essSvr = essSvr;
        }
     
        public static String getEssUsr() {
            return essUsr;
        }
     
        public static void setEssUsr(String essUsr) {
            GetRequests.essUsr = essUsr;
        }
     
        public static String getEssProvider() {
            return essProvider;
        }
     
        public static void setEssProvider(String essProvider) {
            if (essProvider == null) {
                // Default provider (APS) path
                GetRequests.essProvider = "http://" + getEssSvr() + ":13080/aps/JAPI";
            } else {
                GetRequests.essProvider = essProvider;
            }
        }
     
        public static void main(String[] args) {
            int sts = 0;
            IEssbase essbase = null;
            IEssOlapServer olapSvr = null;
     
            essUsr = "admin";
            essPwd = "password";
            essSvr = "localhost";
            essProvider = "http://localhost:13080/aps/JAPI";
     
            try {
                essbase = IEssbase.Home.create(IEssbase.JAPI_VERSION);
                IEssDomain dom = essbase.signOn(essUsr, essPwd, false, null, essProvider);
                olapSvr = (IEssOlapServer) dom.getOlapServer(essSvr);
     
                olapSvr.connect();
     
                IEssIterator requests = olapSvr.getRequests(null, null, null);
     
                for (int i = 0; i < requests.getCount(); i++) {
                    IEssOlapRequest request = (IEssOlapRequest) requests.getAt(i);
                    System.out.println("User name: " + request.getUserName());
                    System.out.println("Application name: " + request.getOlapApplicationName());
                    System.out.println("Cube name: " + request.getCubeName());
                    System.out.println("Request code: " + request.getRequestCode());
                    System.out.println("Request source: " + request.getRequestSource());
                    System.out.println("Request state: " + request.getRequestState());
                    System.out.println("Request string: " + request.getRequestString());
                    System.out.println("Request time: " + request.getRequestTime());
                    System.out.println();
                }
            } catch (EssException x) {
                System.out.println("Error " + x.getLocalizedMessage());
                sts = FAILURE_CODE;
            } catch (Exception e) {
                System.out.println("Error " + e.getLocalizedMessage());
            } finally {
                try {
                    if (essbase != null && essbase.isSignedOn() == true) {
                        essbase.signOff();
                    }
                } catch (EssException x) {
                    System.err.println("Error: " + x.getLocalizedMessage());
                }
            }
            if (sts == FAILURE_CODE) {
                System.exit(FAILURE_CODE);
            }
     
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new GetRequests();
                }
            });
        }
     
        public GetRequests() {
            //headers for the table
            String[] columns = new String[]{
                "User", "Application", "Database", "Request code", "Request source", "Request state", "Request", "Request time"
            };
     
            //actual data for the table in a 2d array
            Object[][] data = new Object[][]{
                {1, "John", 40.0, false, "", "", "", ""},
                {2, "Rambo", 70.0, false, "", "", "", ""},
                {3, "Zorro", 60.0, true, "", "", "", ""},};
     
            //create table with data
            JTable table = new JTable(data, columns);
     
            //add the table to the frame
            //this.add(new JScrollPane(table));
            this.getContentPane().add(table.getTableHeader(), BorderLayout.NORTH);
            this.getContentPane().add(table, BorderLayout.CENTER);
     
            this.setTitle("Essbase requests");
            this.setSize(300, 240);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.pack();
            this.setVisible(true);
        }
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    En AWT/Swing, si les données sont en liste/colonnes, le plus simple est toujours la Jtable. L'alternative étant la JList si on veut afficher en mosaïque par exemple. En revanche, si les données sont arborescentes, il faudrait avoir un treeview, mais ce composant n'existe pas en standard, et le faire avec un JTree peut s'avéré touchy. On peut éventuellement utiliser la TreeTable de Jide (à vérifier la licence).

    Pour le coup SWT/JFace a un TreeViewer relativement simple à mettre en œuvre.

    A voir si JavaFX propose quelque chose dans le genre.

    Pour en revenir à la JTable de Swing, la mise en œuvre d'un modèle pour des objets n'est pas trop complexe tant que les colonnes sont fixes et déterminées dès le départ.

    Exemple de principe :
    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
    public class EssTableModel extends AbstractTableModel {
     
         private static String[] colnames = {"col 1","col 2","col 3","col 4","col 5","col 6","col 7","col 8"}; // titre des colonnes
         private List<IEssBaseObject> data = new ArrayList<>();
     
         public EssTableModel() {
         }
     
         public EssTableModel(IEssIterator ess) {
               setData(ess);
         }
     
         public void setData(IEssIterator ess) {
              data.clear();
              if ( ess!=null ) {
                   Arrays.stream(ess.getAll()).forEach(obj-> data.add(obj));
              }
              firetabledatachanged();
         }    
     
         public boolean isCellEditable(int row, int column) {
                 return false;
         }
     
         public int getColumnCount() {
                 return 8; // nombre de colonnes
         }
     
         public int getRowCount() {
                 return data.size(); // nombre de lignes
         }
     
         public String getColumnName(int column) {
                 return colnames[column];
         }
     
         public Object getValueAt(int row, int column) {
                IEssBaseObject rowObject = data.get(row);
                switch( column ) {
                case 0:
                   return /* ici il faut appeler la méthode qui va récupérer la donnée de la colonne 1*/;
                case 1:
                   return /* ici il faut appeler la méthode qui va récupérer la donnée de la colonne 2*/;
                case 2:
                   return /* ici il faut appeler la méthode qui va récupérer la donnée de la colonne 3*/;
                case 3:
                   return /* ici il faut appeler la méthode qui va récupérer la donnée de la colonne 4*/;
                case 4:
                   return /* ici il faut appeler la méthode qui va récupérer la donnée de la colonne 5*/;
                case 5:
                   return /* ici il faut appeler la méthode qui va récupérer la donnée de la colonne 6*/;
                case 6:
                   return /* ici il faut appeler la méthode qui va récupérer la donnée de la colonne 7*/;
                case 7:
                   return /* ici il faut appeler la méthode qui va récupérer la donnée de la colonne 8*/;
                default:
                   throw new IllegalStateException();
                } 
         }
     
    }
    Avec l'interface IEssBaseObject, il y a juste une petite difficulté : cette interface ne dispose pas de méthode. Les objets l'implémentant implémentent d'autres interfaces ayant les méthodes adaptées au type de l'objet. il faut donc pour chaque objet, analyser ce type (avec un instanceof), et appeler la méthode si l'objet implémente bien l'interface, sinon renvoyer une donnée de remplacement (null par exemple).

    Eventuellement, pour simplifier les tris, filtres, et certains types d'affichage particulier, on peut implémenter dans EssTableModel la méthode getColumnClass qui va retourner la classe de l'objet pour chaque colonne, par exemple comme ça :

    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
    public Object getColumnClass(int row, int column) {
                IEssBaseObject rowObject = data.get(row);
                switch( column ) {
                case 0:
                   return String.class; // exemple pour une colonne de type String
                case 1:
                   return Integer.class;
                case 2:
                   return Boolean.class;
                case 3:
                   return  IEssAppComponent.EEssAppComponentType; // par exemple
                case 4:
                   return String.class;
                case 5:
                   return String.class;
                case 6:
                   return String.class;
                case 7:
                   return String.class;
                default:
                   throw new IllegalStateException();
                } 
         }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre très actif
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 162
    Par défaut
    Hello,

    J'ai bien vu et analysé ta réponse cependant celle-ci m'a semblé tellement compliquée vu mon niveau.

    A ce stade j'ai pu avancer en codant de la façon suivante (voir code exhaustif en bas de mon message).

    Je stocke le résultat de mon interface dans un tableau d'objets, lignes dynamiques, colonnes figées (méthode getEssRequests()) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requestTable = new Object[essRequests.getCount()][8];
    Puis j'alimente ma JTable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JTable table = new JTable(getEssRequests(), columns);
    J'ai rajouté un bouton Refresh (cf méthode jButtonRefreshActionPerformed) afin de pouvoir rafraîchir le JTable sans avoir à le fermer et à le relancer mais ça se corse, je suis tombé sur es articles au sujet du DefaultDataModel et fireTableDataChanged mais je ne vois pas comment l'implémenter dans le code existant.

    J'ai tenté ça mais ça ne passe pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultTableModel model = new DefaultTableModel(new Object[essRequests.getCount()][8]);
    .

    Oui j'avoue que je suis à la rue sur les concepts de base.

    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
     
    import com.essbase.api.base.EssException;
    import com.essbase.api.base.IEssIterator;
    import com.essbase.api.datasource.IEssOlapRequest;
    import com.essbase.api.datasource.IEssOlapServer;
    import com.essbase.api.domain.IEssDomain;
    import com.essbase.api.session.IEssbase;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Properties;
    import java.util.TimeZone;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
     
    /**
     *
     * @author sebroux
     */
    public class GetRequests extends JFrame {
     
        private static String essUsr = readIni("user");
        private static String essPwd = readIni("password");
        private static String essSvr = readIni("server");
        private static String essProvider = readIni("provider");
        private static final int FAILURE_CODE = 1;
     
        public static String getEssPwd() {
            return essPwd;
        }
     
        public static void setEssPwd(String essPwd) {
            GetRequests.essPwd = essPwd;
        }
     
        public static String getEssSvr() {
            return essSvr;
        }
     
        public static void setEssSvr(String essSvr) {
            GetRequests.essSvr = essSvr;
        }
     
        public static String getEssUsr() {
            return essUsr;
        }
     
        public static void setEssUsr(String essUsr) {
            GetRequests.essUsr = essUsr;
        }
     
        public static String getEssProvider() {
            return essProvider;
        }
     
        public static void setEssProvider(String essProvider) {
            if (essProvider == null) {
                // Default provider (APS) path
                GetRequests.essProvider = "http://" + getEssSvr() + ":13080/aps/JAPI";
            } else {
                GetRequests.essProvider = essProvider;
            }
        }
     
        public GetRequests() {
     
            String[] columns = new String[]{
                "User", "Application", "Database", "Request code", "Request source", "Request state", "Request", "Request time"
            };
     
            //Create table with data
            JTable table = new JTable(getEssRequests(), columns);
     
            javax.swing.JButton jButtonRefresh;
            javax.swing.JButton jButtonClose;
            javax.swing.JMenu jMenuFile;
            javax.swing.JMenu jMenuHelp;
            javax.swing.JMenuBar jMenuBar1;
            javax.swing.JMenuItem jMenuItemClose;
            javax.swing.JMenuItem jMenuItemAbout;
            javax.swing.JMenuItem jMenuItemRefresh;
     
            jButtonRefresh = new javax.swing.JButton();
            jButtonRefresh.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButtonRefreshActionPerformed(evt);
                }
            });
     
            jButtonClose = new javax.swing.JButton();
            jButtonClose.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButtonCloseActionPerformed(evt);
                }
            });
     
            jMenuBar1 = new javax.swing.JMenuBar();
            jMenuFile = new javax.swing.JMenu();
            jMenuHelp = new javax.swing.JMenu();
     
            jMenuItemRefresh = new javax.swing.JMenuItem();
     
            jMenuItemClose = new javax.swing.JMenuItem();
            jMenuItemClose.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jMenuItemCloseActionPerformed(evt);
                }
            });
     
            jMenuItemAbout = new javax.swing.JMenuItem();
            jMenuItemAbout.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jMenuItemAboutActionPerformed(evt);
                }
            });
     
            jButtonRefresh.setText("Refresh");
            jButtonClose.setText("Close");
     
            jMenuFile.setText("File");
            jMenuItemRefresh.setText("Refresh");
            jMenuFile.add(jMenuItemRefresh);
            jMenuItemClose.setText("Close");
            jMenuFile.add(jMenuItemClose);
            jMenuBar1.add(jMenuFile);
            jMenuHelp.setText("?");
            jMenuItemAbout.setText("About...");
            jMenuHelp.add(jMenuItemAbout);
            jMenuBar1.add(jMenuHelp);
     
            setJMenuBar(jMenuBar1);
     
            //add the table to the frame
            this.add(new JScrollPane(table));
     
            //this.getContentPane().add(table.getTableHeader(), BorderLayout.NORTH);
            //this.getContentPane().add(table, BorderLayout.CENTER);
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                    .addComponent(jButtonRefresh)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButtonClose))
                            .addGroup(layout.createSequentialGroup()
                                    .addComponent(table, javax.swing.GroupLayout.PREFERRED_SIZE, 1050, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGap(0, 0, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                    .addComponent(table, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    //.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                            .addComponent(jButtonRefresh)
                                            .addComponent(jButtonClose)))
            );
     
            this.setTitle("Essbase requests");
            this.setSize(300, 240);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.pack();
        }
     
        private void jButtonCloseActionPerformed(java.awt.event.ActionEvent evt) {
            System.exit(0);
        }
     
        private void jMenuItemCloseActionPerformed(java.awt.event.ActionEvent evt) {
            System.exit(0);
        }
     
        private void jMenuItemAboutActionPerformed(java.awt.event.ActionEvent evt) {
            JOptionPane.showMessageDialog(null, "about!!!", "About...", JOptionPane.INFORMATION_MESSAGE);
        }
     
        private void jButtonRefreshActionPerformed(java.awt.event.ActionEvent evt) {
            //??? What to do ???
        }
     
        public static void main(String[] args) {
            GetRequests monTableau = new GetRequests();
            monTableau.setVisible(true);
        }
     
        private Object[][] getEssRequests() {
            int sts = 0;
            IEssbase essbase = null;
            IEssOlapServer olapSvr = null;
            Object[][] requestTable = null;
     
            try {
                essbase = IEssbase.Home.create(IEssbase.JAPI_VERSION);
                IEssDomain dom = essbase.signOn(getEssUsr(), getEssPwd(), false, null, getEssProvider());
                olapSvr = (IEssOlapServer) dom.getOlapServer(getEssSvr());
     
                olapSvr.connect();
     
                IEssIterator essRequests = olapSvr.getRequests(null, null, null);
     
                requestTable = new Object[essRequests.getCount()][8];
     
                for (int i = 0; i < essRequests.getCount(); i++) {
                    IEssOlapRequest request = (IEssOlapRequest) essRequests.getAt(i);
     
                    requestTable[i] = new Object[]{request.getUserName(),
                        request.getOlapApplicationName(),
                        request.getCubeName(),
                        request.getRequestCode(),
                        request.getRequestSource(),
                        requestState(request.getRequestState()),
                        request.getRequestString(),
                        secondsToString(request.getRequestTime())
                    };
                }
            } catch (EssException x) {
                System.out.println("Error " + x.getLocalizedMessage());
                sts = FAILURE_CODE;
            } finally {
                try {
                    if (essbase != null && essbase.isSignedOn() == true) {
                        essbase.signOff();
                    }
                } catch (EssException x) {
                    System.err.println("Error: " + x.getLocalizedMessage());
                }
            }
            if (sts == FAILURE_CODE) {
                System.exit(FAILURE_CODE);
            }
     
            return requestTable;
        }
     
        private String secondsToString(int seconds) {
            int mseconds = seconds * 1000;
            TimeZone tz = TimeZone.getTimeZone("UTC");
            SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
            df.setTimeZone(tz);
            String time = df.format(new Date(mseconds));
            return time;
        }
     
        public static String readIni(String key) {
            String value = "";
            try {
                Properties properties = new Properties();
                properties.load(new FileInputStream("properties.ini"));
                value = properties.getProperty(key);
            } catch (IOException e) {
                System.out.println("Error " + e.getLocalizedMessage());
            }
            return value;
        }
     
        private String requestState(short sState) {
     
            String state = "";
     
            switch (sState) {
                case 0:
                    state = "Processing";
                    break;
                case 1:
                    state = "Terminating";
                    break;
                case 2:
                    state = "Terminated";
                    break;
            }
            return state;
        }
    }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sroux Voir le message

    J'ai rajouté un bouton Refresh (cf méthode jButtonRefreshActionPerformed) afin de pouvoir rafraîchir le JTable sans avoir à le fermer et à le relancer mais ça se corse, je suis tombé sur es articles au sujet du DefaultDataModel et fireTableDataChanged mais je ne vois pas comment l'implémenter dans le code existant.
    Il y'a pourtant un exemple pour coder ça dans mon dernier message. DefaultDataModel c'est juste une implémentation par défaut de TableModel qui se base sur AbstractTableModel (La classe sur laquelle je me base dans mon exemple) qui se base sur un stockage par Vector, qui implémente des comportements basiques. Tu peux changer les données du modèle avec la méthode setDataVector. Inutile d'appeler fireTableDataChanged. Tu peux également vider la table (avec setRowCount(0) sur le modèle) et ajouter toutes les lignes, avec addRow (un appel par ligne de données, en bouclant), mais c'est moins efficace (cela peut avoir un intérêt pour de très gros résultats de requête si on veut faire un affichage progressif.

    Citation Envoyé par sroux Voir le message

    J'ai tenté ça mais ça ne passe pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultTableModel model = new DefaultTableModel(new Object[essRequests.getCount()][8]);
    .
    Ça ne risque pas de fonctionner, puisqu'il est nécessaire de préciser la liste des colonnes dans l'appel du constructeur. Et ton new Object[essRequests.getCount()][8] ne fait que créer un tableau vide sans référence. Ta table sera donc vide.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/05/2018, 20h34
  2. Réponses: 4
    Dernier message: 31/01/2017, 16h29
  3. Design des jframes dynamique
    Par kokog dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 04/10/2013, 15h00
  4. Alimentation de table dynamiquement
    Par beuzy dans le forum SAP
    Réponses: 10
    Dernier message: 14/12/2012, 11h07
  5. Alimenter un tableau dynamique
    Par bdptaki dans le forum Langage
    Réponses: 2
    Dernier message: 03/07/2008, 11h26

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