Animacja JavaFX w Swing-u

0

Wiem, że odgrzewam stary temat, ale po jakimś czasie powróciłem do próby połączenia animacji JavaFX i Swinga i powiem szczerze, że nie wiele znalazłem w Internecie.

Byłbym bardzo wdzięczny gdy ktoś pomógł mi to zrobić.

Chodzi mi o to aby:

-Animację

 package transitionpath;

import javafx.animation.PathTransition;
import javafx.animation.PathTransition.OrientationType;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.paint.Color;
import javafx.scene.shape.HLineTo;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;
import javafx.util.Duration;

public class TransitionPath extends Application {

    private PathTransition pathTransition;

    private void init(Stage primaryStage) {
        
        Image image = new Image("src/ampera10.png");
        ImageView iv1 = new ImageView();
        iv1.setImage(image);
        
        Group root = new Group();
        primaryStage.setResizable(false);
        primaryStage.setScene(new Scene(root, 800,600));

        root.getChildren().add(iv1);
        Path path = new Path();
     
        path.getElements().add(new MoveTo(0,400));
        path.getElements().add(new HLineTo(100));
        path.getElements().add(new LineTo(200,350));
        path.getElements().add(new HLineTo(300));
        path.getElements().add(new LineTo(400,400));
        path.getElements().add(new HLineTo(500));
        path.getElements().add(new LineTo(550,380));
        path.getElements().add(new HLineTo(600));
        path.getElements().add(new LineTo(650,400));
        path.getElements().add(new HLineTo(780));

        path.setStroke(Color.DODGERBLUE);
        path.getStrokeDashArray().setAll(2d,2d);
        root.getChildren().add(path);
        pathTransition = new PathTransition();
        pathTransition.setDuration(Duration.seconds(30));
        pathTransition.setPath(path);
        pathTransition.setNode(iv1);
        pathTransition.setOrientation(OrientationType.ORTHOGONAL_TO_TANGENT);

    }

    public void play() throws InterruptedException {

            pathTransition.play();
    }


    @Override public void start(Stage primaryStage) throws Exception {
        init(primaryStage);
        primaryStage.show();
        play(); 
        
    }
    public static void main(String[] args) { launch(args); }
}

-Menu w Swingu

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package shs_fx1.pkg0;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;


/**
 *
 * @author Marcin Ciesielski
 */
public class SHS_Main extends javax.swing.JFrame {

    /**
     * Creates new form SHS_Main
     */
    
    Dimension rozSys = Toolkit.getDefaultToolkit().getScreenSize();
    int rozSysY = rozSys.height;
    int rozSysX = rozSys.width;
    String LogSprRozString;
    
    public SHS_Main() throws IOException {
        initComponents();
        metodaSprRoz();
        
        
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem6 = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();
        jMenu4 = new javax.swing.JMenu();
        jMenuItem3 = new javax.swing.JMenuItem();
        jMenuItem4 = new javax.swing.JMenuItem();
        jMenuItem5 = new javax.swing.JMenuItem();
        jMenu3 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("SHS");
        setMinimumSize(new java.awt.Dimension(800, 6));

        jMenu1.setText("Symulacja");

        jMenuItem6.setText("Start");
        jMenu1.add(jMenuItem6);

        jMenuBar1.add(jMenu1);

        jMenu2.setText("Ustawienia");

        jMenu4.setText("Zmiana języka");

        jMenuItem3.setText("Polski");
        jMenu4.add(jMenuItem3);

        jMenuItem4.setText("Angielski");
        jMenu4.add(jMenuItem4);

        jMenuItem5.setText("Niemiecki");
        jMenu4.add(jMenuItem5);

        jMenu2.add(jMenu4);

        jMenuBar1.add(jMenu2);

        jMenu3.setText("Pomoc");

        jMenuItem1.setText("Pomoc");
        jMenu3.add(jMenuItem1);

        jMenuItem2.setText("O programie");
        jMenu3.add(jMenuItem2);

        jMenuBar1.add(jMenu3);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 800, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 579, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Windows".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(SHS_Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(SHS_Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(SHS_Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(SHS_Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                try {
                    new SHS_Main().setVisible(true);
                } catch (IOException ex) {
                    Logger.getLogger(SHS_Main.class.getName()).log(Level.SEVERE, null, ex);
                }
                
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenu jMenu3;
    private javax.swing.JMenu jMenu4;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JMenuItem jMenuItem3;
    private javax.swing.JMenuItem jMenuItem4;
    private javax.swing.JMenuItem jMenuItem5;
    private javax.swing.JMenuItem jMenuItem6;
    // End of variables declaration                   
 
    
    public void metodaSprRoz(){
        
        FileWriter fw = null;
        
        try {
            
            if(rozSysX == 800 && rozSysY == 600){
                //SVGA 	800×600 (4:3)
                LogSprRozString = "SVGA 800×600 (4:3)";
                setExtendedState(JFrame.MAXIMIZED_BOTH);             
            }
            if(rozSysX == 1024 && rozSysY == 768){
                //XGA 	1024×768 (4:3)
                LogSprRozString = "XGA 1024×768 (4:3)";
                setExtendedState(JFrame.MAXIMIZED_BOTH);

            }
            if(rozSysX == 1280 && rozSysY == 720){
                //HDTV 720p 	1280×720 (16:9)
                LogSprRozString = "HDTV 720p 1280×720 (16:9)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 1366 && rozSysY == 768){
                //HDTV 	1366×768 (16:9)
                LogSprRozString = "HDTV 1366×768 (16:9)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 1280 && rozSysY == 800){
                //WXGA 	1280×800 (16:10)
                LogSprRozString = "WXGA 1280×800 (16:10)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 1440 && rozSysY == 900){
                //WXGA+ 	1440×900 (16:10)
                LogSprRozString = "WXGA 1440×900 (16:10)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 1280 && rozSysY == 1024){
                //SXGA 	1280×1024 (5:4)
                LogSprRozString = "SXGA 1280×1024 (5:4)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 1600 && rozSysY == 1024){
                //WSXGA 	1600×1024 (16:10)
                LogSprRozString = "WSXGA 1600×1024 (16:10)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 1400 && rozSysY == 1050){
                //SXGA+ 	1400×1050 (4:3)
                LogSprRozString = "SXGA+ 1400×1050 (4:3)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 1024 && rozSysY == 600){
                //WSVGA 	1024×600 (16:9)
                LogSprRozString = "WSVGA 1024×600 (16:9)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 1680 && rozSysY == 1050){
                //WSXGA+ 	1680×1050 (16:10)
                LogSprRozString = "WSXGA+ 1680×1050 (16:10)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 1600 && rozSysY == 1200){
                //UXGA 	1600×1200 (4:3)
                LogSprRozString = "UXGA 1600×1200 (4:3)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 1600 && rozSysY == 900){
                //HD+ 	1600×900 (16:9)
                LogSprRozString = "HD+ 1600×900 (16:9)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 1920 && rozSysY == 1080){
                //HDTV 1080p 	1920×1080 (16:9)
                LogSprRozString = "HDTV 1080p 1920×1080 (16:9)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 1920 && rozSysY == 1200){
                //WUXGA 	1920×1200 (16:10)
                LogSprRozString = "WUXGA 1920×1200 (16:10)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 2048 && rozSysY == 1152){
                //QWXGA 	2048×1152 (16:9)
                LogSprRozString = "QWXGA 2048×1152 (16:9)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 2048 && rozSysY == 1536){
                //QXGA 	2048×1536 (4:3)
                LogSprRozString = "QXGA 2048×1536 (4:3)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 2560 && rozSysY == 1600){
                //WQXGA 	2560×1600 (16:10)
                LogSprRozString = "WQXGA 	2560×1600 (16:10)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            if(rozSysX == 2560 && rozSysY == 2048){
                //QSXGA 	2560×2048 (5:4)
                LogSprRozString = "QSXGA 2560×2048 (5:4)";
                setExtendedState(JFrame.MAXIMIZED_BOTH); 
            }
            
            fw = new FileWriter("logs/LogSprRoz.txt");
            fw.write("Wykryta rozdzielczość ekranu to: " + LogSprRozString);
            
        } catch (IOException ex) {
            Logger.getLogger(SHS_Main.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                fw.close();
            } catch (IOException ex) {
                Logger.getLogger(SHS_Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }
     
    }

Połączyć w podobny sposób:

0

Odpowiedź jest prosta:
Biblioteka JavaFX ma coś takiego jak JFXPanel, który z kolei może brać na siebie kontrolkę Scene.
Czyli:
W JFrame musisz dodać JFXPanel, w którym umieszczasz animację. Będziesz musiał podłączyć swingowe menu do metod klas JavaFX.
Link: http://docs.oracle.com/javafx/2/api/javafx/embed/swing/JFXPanel.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1