Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [java] GUI dinamiche

  1. #1

    [java] GUI dinamiche

    Salve,

    vorrei creare delle GUI dinamiche dove le dimensioni dei componenti del jframe si adattano automaticamente se il jframe viene "resizato" .

    attualmente, usando il grouplayout, se "resizo" la finestra i componenti non si riadattano ma spariscono.

    suggerimenti ?
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  2. #2
    guarda ti rimando a questa discussione dove non riuscivo a capire come redimensionare l'ellisse quando andavo a restringere o allargare il frame forse ti può essere utile. http://forum.html.it/forum/showthrea...hlight=ellisse

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java] GUI dinamiche

    Originariamente inviato da JunkyFunki
    attualmente, usando il grouplayout, se "resizo" la finestra i componenti non si riadattano ma spariscono.
    GroupLayout è un layout manager abbastanza "avanzato" e disponibile solo da Java 6. Hai già letto il tutorial di GroupLayout dove spiega la questione del resizable?

    Comunque puoi anche usare altri layout manager. Dipende dalla interfaccia che devi realizzare. Non è affatto detto che devi usare per forza GroupLayout. GridBagLayout ad esempio è molto efficace, se usato bene.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    sono riuscito in parte a risolvere il problema seguendo le linee guida del tutorial indicatomi da andbin

    il problema ora è nella dimensione del font delle jlabel e dei jbutton, in pratica io le dichiaro nel seguente modo :
    Bottone.setFont(new java.awt.Font("Tahoma", 1, 18));

    ovviamente quando "resizo" la finestra il font non varia, era bold 18 e rimane sempre bold 18

    c'è un modo per impostare la dimensione del font in modo dinamico?
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da JunkyFunki
    ovviamente quando "resizo" la finestra il font non varia, era bold 18 e rimane sempre bold 18
    Beh, certo! I layout manager si occupano solo di posizionare e dimensionare i componenti. Non si preoccupano minimamente in alcun modo di qualunque altra "proprietà" dei componenti (font, colori ecc...).

    Originariamente inviato da JunkyFunki
    c'è un modo per impostare la dimensione del font in modo dinamico?
    A livello "standard" no, non mi risulta ci sia nulla. Se vuoi si può fare ma devi farlo tu espressamente con del codice. Il problema semmai è quello di stabilire la relazione tra la dimensione della finestra (o dei componenti) e la dimensione del font.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Originariamente inviato da andbin
    Beh, certo! I layout manager si occupano solo di posizionare e dimensionare i componenti. Non si preoccupano minimamente in alcun modo di qualunque altra "proprietà" dei componenti (font, colori ecc...).

    A livello "standard" no, non mi risulta ci sia nulla. Se vuoi si può fare ma devi farlo tu espressamente con del codice. Il problema semmai è quello di stabilire la relazione tra la dimensione della finestra (o dei componenti) e la dimensione del font.
    ok ma per farlo via codice dovrei :

    1) intercettare l'azione "finestra in movimento"

    2) aumentare il carattere del font se la finestra ingrandisce o ridurlo se la finestra diminuisce

    3) ridisegnare la finestra


    Il secondo e il terzo non penso siano difficili ma come intercetto la finestra in movimento? su windowlistener non mi sembra ci sia il metodo opportuno
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da JunkyFunki
    su windowlistener non mi sembra ci sia il metodo opportuno
    Infatti non devi usare WindowListener ma ComponentListener (JFrame è un Component) che ha il metodo componentResized().

    Ecco un esempio abbastanza banale (e forse stupido). Ho stabilito che la dimensione del font è il 5% dell'altezza della finestra.

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame
    {
        private JButton b1, b2, b3, b4, b5;
    
        public TestFrame ()
        {
            super ("Test Frame");
    
            setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            setSize (300, 300);
    
            b1 = new JButton ("Uno");
            b2 = new JButton ("Due");
            b3 = new JButton ("Tre");
            b4 = new JButton ("Quattro");
            b5 = new JButton ("Cinque");
    
            add (b1, BorderLayout.NORTH);
            add (b2, BorderLayout.EAST);
            add (b3, BorderLayout.SOUTH);
            add (b4, BorderLayout.WEST);
            add (b5, BorderLayout.CENTER);
    
            addComponentListener (new ComponentAdapter ()
            {
                public void componentResized (ComponentEvent e)
                {
                    adjustFont (b1, 5.0f);
                    adjustFont (b2, 5.0f);
                    adjustFont (b3, 5.0f);
                    adjustFont (b4, 5.0f);
                    adjustFont (b5, 5.0f);
                }
            });
        }
    
        private void adjustFont (Component c, float percentual)
        {
            float fontSize = getHeight () * percentual / 100.0f;
    
            Font f = c.getFont ();
            f = f.deriveFont (fontSize);
            c.setFont (f);
        }
    
        public static void main (String[] args)
        {
            SwingUtilities.invokeLater (new Runnable ()
            {
                public void run ()
                {
                    TestFrame f = new TestFrame ();
                    f.setVisible (true);
                }
            });
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.