Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    18

    Effetto libro JPanel java

    Salve a tutti,

    Sto creando un app con java trmite le librerie swing e awt. Ho due JPanel che sono contenuti in una JFrame. Questi due JPanel hanno la stessa grandezza e si sovrappongono. Sto creando delle animazione per cambiare un JPanel con l' altro come per esempio quella dello scorrimento utilizzato semplicemente il metodo setLocation.

    Volevo sapere se è possibile creare una animazione a libro, come se si stesse girando uan pagina di un libro, quindi un effetto 3d, ciò che si muove è il JPanel. E' possibile? se si come. Mi potete dare dei link di riferimento con anche esempi? grazie
    Ultima modifica di ITobeI; 29-09-2014 a 11:20

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da ITobeI Visualizza il messaggio
    Volevo sapere se è possibile creare una animazione a libro, come se si stesse girando uan pagina di un libro, quindi un effetto 3d
    Detto in generale, Swing (e peggio ancora AWT) "di serie" non hanno e non offrono alcun tipo di effetto grafico particolare di movimento/transizione. Già anche solo un semplice effetto di "fading" su un componente Swing (cosa tecnicamente possibile) richiede una conoscenza abbastanza profonda di Swing e del custom painting.

    Quindi se vuoi arrivare ad una interfaccia utente veramente "cool", sappi che Swing (e ripeto, peggio ancora AWT) non fanno al caso tuo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Detto in generale, Swing (e peggio ancora AWT) "di serie" non hanno e non offrono alcun tipo di effetto grafico particolare di movimento/transizione. Già anche solo un semplice effetto di "fading" su un componente Swing (cosa tecnicamente possibile) richiede una conoscenza abbastanza profonda di Swing e del custom painting.

    Quindi se vuoi arrivare ad una interfaccia utente veramente "cool", sappi che Swing (e ripeto, peggio ancora AWT) non fanno al caso tuo.
    questo argomento mi interessa anche a me.
    quindi ti chiedo: per aver qualche effetto più "cool" cosa è consigliato usare in ambito java?
    javafx "risolve" qualcosa in questo senso??

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    18
    Capito, e c'è una soluzione , una libreria ( possibilmente gratuita ) e che è possibile integrare con Swing per poter fare questo effetto libro? anche se non è possibile integrarla che libreria dovrei usare

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Magari esisterà una qualche libreria che ti aiuti nell'effetto richiesto, che io non conosco, ma una valida alternativa, seppur più elaborata, è quella di giocare con il paintComponent di un componente grafico (swing).
    Giusto a titolo di esempio ho scritto il seguente codice, è giusto per rendere l'idea di una possibile implementazione:

    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    class Libro extends JPanel {
        private final int facciate = 100;
        private final int righePerPagina = 10;
        private final int delay = 10;
        private int facciataCorrente;
        private int x,y;
        private final String riga = "Ciao mamma guarda come mi diverto";
        private Timer timer;
        private boolean aspetta , destra;
    
        public Libro (){
            setPreferredSize (new Dimension (500 , 500));
            facciataCorrente = 0;
            x = 50;
            aspetta = false;
            timer = new Timer (delay , new ActionListener () {
                public void actionPerformed (ActionEvent ae) {
                    if (destra) {
                        if (x > 50) {
                            x--;
                            paintImmediately (50 , 100 , 400 , 300);
                        }else {
                            aspetta = false;
                            timer.stop ();
                            facciataCorrente++;
                            paintImmediately (50 , 100 , 400 , 300);
                        }
                    }else {
                        if (x < 450) {
                            x++;
                            paintImmediately (50 , 100 , 400 , 300);
                        }else {
                            aspetta = false;
                            timer.stop ();
                            facciataCorrente--;
                            paintImmediately (50 , 100 , 400 , 300);
                        }
                    }
                }
            });
    
            addKeyListener (new KeyAdapter () {
                public void keyPressed (KeyEvent ke) {
                    if (ke.getKeyCode () == KeyEvent.VK_LEFT && facciataCorrente > 0 && !aspetta) {
                        System.out.println ("ENTRATO");
                        x = 50;
                        destra = false;
                        aspetta = true;
                        timer.start ();
                    }else if (ke.getKeyCode () == KeyEvent.VK_RIGHT && facciataCorrente < facciate && !aspetta) {
                        System.out.println ("ENTRATO1");
                        x = 450;
                        destra = true;
                        aspetta = true;
                        timer.start ();
                    }
                }
            });
        }
    
        public void paintComponent (Graphics g) {
            super.paintComponent (g);
            g.setColor (Color.BLACK);
            //COPERTINA
            g.fillRect (45,95,205,310);
            g.fillRect (250,95,205,310);
    
            g.setFont (g.getFont ().deriveFont (10f));
            if (facciataCorrente > 0) {
                if (facciataCorrente == 1 && aspetta && !destra) {
                }else {
                    g.drawRect (50,100,200,300);
                    g.setColor(Color.WHITE);
                    g.fillRect (50,100,200,300);
                    g.setColor (Color.BLACK);
                    for (int i=0;i<righePerPagina;i++) {
                        g.drawString (riga , 55 , 110 + i * (290 / righePerPagina));
                    }
                    //g.drawString (String.valueOf (facciataCorrente * 2) ,55 , 395);
                }
            }
            if (facciataCorrente < facciate) {
                if (facciataCorrente == facciate - 1 && aspetta && destra) {
                }else {
                    g.setColor (Color.BLACK);
                    g.drawRect (250,100,200,300);
                    g.setColor(Color.WHITE);
                    g.fillRect (250,100,200,300);
                    g.setColor (Color.BLACK);
                    for (int i=0;i<righePerPagina;i++) {
                        g.drawString (riga , 255 , 110 + i * (290 / righePerPagina));
                    }
                    //g.drawString (String.valueOf (facciataCorrente * 2 + 1) ,445 , 395);
                }
            }
    
            if (aspetta) {
                g.setColor (Color.BLACK);
                g.drawRect (x < 250 ? x : 250,100,Math.abs (250 - x),300);
                g.setColor(Color.WHITE);
                g.fillRect (x < 250 ? x : 250,100,Math.abs (250 - x),300);
            }
        }
    
        public static void main (String [] args) {
            final Libro l = new Libro ();
            JFrame f = new JFrame ();
            f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            f.getContentPane ().add (l);
            l.requestFocusInWindow ();
            f.addWindowFocusListener (new WindowFocusListener () {
                public void windowGainedFocus (WindowEvent we) {
                    l.requestFocusInWindow ();
                }
    
                public void windowLostFocus (WindowEvent we) {}
            });
    
            f.pack ();
            f.setVisible (true);
        }
    
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    18
    ciao zipangulu e grazie per la risposta. Ho visto l' animazione, ma comunque è una animazione in 2d e non si vede l' effetto del gira pagina vero e proprio. Vabbe penso che dovrò rinunciarci grazie comunque

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.