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

JavaFX Discussion :

JavaFX lancé à partir d'une Jframe


Sujet :

JavaFX

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Par défaut JavaFX lancé à partir d'une Jframe
    Bonjour à tous,

    Mon problème est le suivant, j'ai un live chart affichant le débit upload et download en JavaFX et j'aimerais qu'à partir de ma jframe, en cliquant sur le bouton, la chart démarre.

    En cherchant sur le net, j'ai essayé bcp de chose mais rien, je ne sais pas comment créer un constructeur JavaFX afin de l'appeler dans la jframe.

    Code du bouton de la jframe :
    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
     
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     
            final CountDownLatch init = new CountDownLatch(1);
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    MTstc mTstc = new MTstc();
                    init.countDown();
                }
            });
            try {
                init.await();
            } catch (InterruptedException ex) {
                Logger.getLogger(SurvReseau.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    Code de la chart JavaFX:
    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
     
     
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import javafx.application.Platform;
    import javafx.concurrent.Service;
    import javafx.concurrent.Task;
    import javafx.scene.chart.CategoryAxis;
    import javafx.scene.chart.LineChart;
    import javafx.scene.chart.XYChart;
    import javafx.application.Application;
    import static javafx.application.Application.launch;
    import javafx.scene.Scene;
    import javafx.scene.chart.NumberAxis;
    import javafx.stage.Stage;
    import org.hyperic.sigar.Sigar;
    import org.hyperic.sigar.SigarException;
     
    public class MTstc extends Application {
     
     
        public static void main(String [] args){
            launch(args);
        }
     
        final XYChart.Series seriesDownload = new XYChart.Series();
        final XYChart.Series seriesUpload = new XYChart.Series();
        final CategoryAxis xAxis = new CategoryAxis();
        final NumberAxis yAxis = new NumberAxis();
        MTspeedtest speedtest; 
        @Override
        public void start(Stage stage) throws SigarException, InterruptedException {
     
            speedtest = new MTspeedtest(new Sigar());
            stage.setTitle("Activités ascendant et descendant");
            xAxis.setAutoRanging(true);
            xAxis.setLabel("Temps");
            yAxis.setLabel("Taille");
            final LineChart<String, Number> lineChart = new LineChart<>(xAxis, yAxis);
            lineChart.setTitle("Kb/sec");
            seriesDownload.setName("Download");
            seriesUpload.setName("Upload");
            Scene scene = new Scene(lineChart, 800, 600);
            stage.setScene(scene);
            stage.show();
            lineChart.getData().addAll(seriesDownload,seriesUpload);
     
            Service<Integer> service = new Service<Integer>() {
     
                @Override
                protected Task<Integer> createTask() {
                    return task;
                }
            };
            service.start(); 
        }
     
        Task<Integer> task = new Task<Integer>() {
     
            @Override
            protected Integer call() throws Exception {
                int iterations;
                for (iterations = 0; iterations < 100000; iterations++) {
                    if (isCancelled()) {
                        break;        
                    }
                    final Date date = new Date();
                    final float i = speedtest.getMetric()[0];
                    final float j = speedtest.getMetric()[1];
                    Platform.runLater(new Runnable() {
                        @Override
                        public void run() {   
                            seriesDownload.getData().add(new XYChart.Data(new SimpleDateFormat("HH:mm:ss").format(new Date()), i)); 
                            seriesUpload.getData().add(new XYChart.Data(new SimpleDateFormat("HH:mm:ss").format(new Date()), j));
                            xAxis.autosize();
                            if (seriesDownload.getData().size() > 20 || seriesUpload.getData().size() > 20) {
                                seriesDownload.getData().remove(0, seriesDownload.getData().size() - 20);
                                seriesUpload.getData().remove(0, seriesUpload.getData().size() - 20);
                            }
                        }      
                    }); 
                    Thread.sleep(1000);
                }
                return iterations;
            }
        };
    }
    Tout idée est la bienvenue... merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Par défaut
    Sur le net, je vois des explications à chaque fois pour intégrer javafx dans une jframe.
    Dois-je obligatoirement créer une nouvelle jframe et recréer ma classe javafx pour ensuite à partir du bouton de la jframe appeler la nouvelle qui contient la javafx ?
    Il n'est pas possible d'appeler directement la javafx ?? o_O

  3. #3
    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
    Non, tu intègres ton JFXPanel ou tu veux, y compris dans ta JFrame de base si tu veux.

    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
    package test;
     
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import javafx.application.Platform;
    import javafx.embed.swing.JFXPanel;
    import javafx.scene.Scene;
    import javafx.scene.chart.LineChart;
    import javafx.scene.chart.NumberAxis;
    import javafx.scene.layout.AnchorPane;
    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingConstants;
    import javax.swing.SwingUtilities;
    import javax.swing.border.EmptyBorder;
     
    /**
     *
     * @author fabriceb
     */
    public class Main {
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    initAndShowGUI();
                }
            });
        }
     
        /**
         * Called on EDT.
         */
        private static void initAndShowGUI() {
            final JButton chartButton = new JButton("Show Chart !");
            final JPanel buttonBox = new JPanel();
            buttonBox.setBorder(new EmptyBorder(6, 6, 6, 6));
            buttonBox.setLayout(new BoxLayout(buttonBox, SwingConstants.HORIZONTAL));
            buttonBox.add(chartButton);
            final JFrame frame = new JFrame("Test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());
            frame.add(buttonBox, BorderLayout.SOUTH);
            frame.setSize(500, 500);
            frame.setVisible(true);
            //
            chartButton.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    // Already there.
                    for (final Component component : frame.getContentPane().getComponents()) {
                        if (component instanceof JFXPanel) {
                            return;
                        }
                    }
                    // Add new chart.
                    final JFXPanel fxPanel = new JFXPanel();
                    frame.add(fxPanel, BorderLayout.CENTER);
                    Platform.runLater(new Runnable() {
                        @Override
                        public void run() {
                            loadChartContent(fxPanel);
                        }
                    });
                }
            });
        }
     
        /**
         * Called on JavaFX app thread.
         * @param fxPanel 
         */
        private static void loadChartContent(final JFXPanel fxPanel) {
            int power = 2;
            int minX = 0;
            int maxX = 10;
            double maxY = 0;
            final LineChart.Series series = new LineChart.Series();
            series.setName("^ 2");
            for (int x = minX; x <= maxX; x++) {
                final double y = Math.pow(x, power);
                maxY = Math.max(maxY, y);
                final LineChart.Data data = new LineChart.Data<>(x, y);
                series.getData().add(data);
            }
            final NumberAxis xAxis = new NumberAxis(minX, maxX, 5);
            xAxis.setLabel("x");
            final NumberAxis yAxis = new NumberAxis(0, maxY, maxY / 5);
            yAxis.setLabel("y");
            final LineChart chart = new LineChart(xAxis, yAxis);
            chart.getData().add(series);
            chart.setTitle("y = x ^ 2");
            AnchorPane.setTopAnchor(chart, 0d);
            AnchorPane.setLeftAnchor(chart, 0d);
            AnchorPane.setBottomAnchor(chart, 0d);
            AnchorPane.setRightAnchor(chart, 0d);
            final AnchorPane root = new AnchorPane();
            root.getChildren().add(chart);
            final Scene scene = new Scene(root);
            fxPanel.setScene(scene);
        }
    }
    Nom : FX Chart in Swing.jpg
Affichages : 574
Taille : 24,0 Ko
    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

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Par défaut
    Un grand merci à toi

    j'ai compris le principe et j'ai pu faire ce que je voulais, à savoir :

    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
     
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            final JFrame frameFX = new JFrame("Activités ascendant et descendant");
            frameFX.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frameFX.setLayout(new BorderLayout());
            frameFX.setSize(800, 600); 
            frameFX.setResizable(false);
            for (final Component component : frameFX.getContentPane().getComponents()) {
                        if (component instanceof JFXPanel) {
                            return;
                        }
            }
            final JFXPanel fxPanel = new JFXPanel();
            frameFX.add(fxPanel, BorderLayout.CENTER);
            frameFX.setLocationRelativeTo(null);
            frameFX.setVisible(true); 
            Platform.runLater(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                new MTstc().start(fxPanel);
                            } catch (SigarException | InterruptedException ex) {
                                Logger.getLogger(SurvReseau.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
            });
        }
    J'aurais tout de même en 2 question :

    1- Que fais exactement cette boucle ? Car si je l'enlève mon code fonctionne encore...
    Par sécurité pour dire que tant que la frame existe, elle lui renvoi la jfxpanel ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (final Component component : frameFX.getContentPane().getComponents()) {
                        if (component instanceof JFXPanel) {
                            return;
                        }
            }
    2- En compilant (j'utilise Netbeans), la compilation s'effectue avec succès mais je vois en rouge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Note: C:\Users\ICE\Documents\NetBeansProjects\MTstc\src\mtstc\MTstc.java uses or overrides a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    Note: Some input files use unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.

  5. #5
    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
    1. Je vérifie juste que le JFXPanel n'est pas déjà dans le stage pour éviter de le recréer quand je clique sur le bouton.
    2. Quelque part dans ton code ou le mien il y a du code déprécié qui est utilisé. Le code déprécié c'est du code qu'il n'est plus conseillé d'utiliser car "mis à la retraite" (ex : API pas safe, gros bug incorrigible; etc) mais qui est encore accessible car pas retiré. Une option de compilation dans les propriété du projet sous NetBeans doit permettre de trouver la ligne en question.
    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. Réponses: 0
    Dernier message: 26/03/2012, 16h52
  2. recupération de données à partir d'une JFrame
    Par dearraed dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 04/02/2010, 13h37
  3. Retourner un objet à partir d'une JFrame/JDialog
    Par Julien Bodin dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 06/05/2009, 15h57
  4. [SWING]obtention de JFrame à partir d'une autre
    Par 3asfoura dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 17/08/2007, 11h15
  5. Ouvrir une JFrame à partir d'une autre
    Par seyar666 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 09/03/2007, 15h53

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