GUI personalizzata

« Older   Newer »
 
  Share  
.
  1.      
     
    .
    Avatar

    Mr. Canotta

    Group
    Member
    Posts
    3,228
    Reputazione
    0
    Location
    Hiroshima

    Status
    Salve a tutti, questo pomeriggio ho parlato con eXander che mi ha consigliato di aprire un topic in questa spiegazione. Vorei avere una delucidazione sulle GUI in Java. Innanzitutto faccio una premessa, utilizzo come IDE NetBeans e, per la creazione delle GUI, uso l'apposito tool offerto dal programma. Questo perché non ho ancora molta esperienza nell'ambito delle GUI e quindi non saprei se il codice scritto sia in qualche modo "corretto". Inoltre, sono del parere che se qualcuno ha già fatto il lavoro "sporco" ed il codice è testato e funzionante, è meglio riutilizzarlo, no?

    In questi giorni sto sviluppando un'applicazione, precisamente un WYSIWYG amatoriale che, alla pressione di un jButton, mi genera il codice corrispondente al rispettivo tag. Vorrei realizzare un'interfaccia grafica più carina e soprattutto che sia univoca su tutti i sistemi operativi. Il L&F Nimbus non mi piace molto e preferirei personalizzare ciascun singolo componente. Ma se per i jButton è possibile farlo utilizzando un'immagine, la stessa cosa non posso farla per un componente quale il jComboBox.

    Ho letto dell'esistenza di JavaFX, però non credo sia ancora il momento di spingermi a tanto, per quanto la tentazione sia forte dal momento che prevede l'utilizzo di un foglio di stile .css per gestire la grafica.Mi chiedo quindi se sia possibile in qualche modo ottenere qualcosa di simile e personalizzato utilizzando gli Swing.
     
    .
  2.      
     
    .
    Avatar

    Senior Member

    Group
    Manager
    Posts
    10,796
    Reputazione
    +266

    Status
    Ciao, cercherò di risponderti al meglio e di esserti d'aiuto.


    CITAZIONE (Kohei @ 27/4/2016, 20:49) 
    Salve a tutti, questo pomeriggio ho parlato con eXander che mi ha consigliato di aprire un topic in questa spiegazione. Vorei avere una delucidazione sulle GUI in Java. Innanzitutto faccio una premessa, utilizzo come IDE NetBeans e, per la creazione delle GUI, uso l'apposito tool offerto dal programma. Questo perché non ho ancora molta esperienza nell'ambito delle GUI e quindi non saprei se il codice scritto sia in qualche modo "corretto". Inoltre, sono del parere che se qualcuno ha già fatto il lavoro "sporco" ed il codice è testato e funzionante, è meglio riutilizzarlo, no?

    Di certo la tua esperienza non aumenterà se ti affiderai ad un tools il cui scopo è sì velocizzare il lavoro, ma di certo non quello di apprendere i componenti che stai utilizzando. Di solito gli IDE all'inizio sono sconsigliati proprio perchè non permettono di imparare.
    Ti consiglierei quindi di utilizzare il compilatore e l'interprete da riga di comando, e di studiare AWT/Swing dal tutorial ufficiale di Oracle. Quando avrai abbastanza dimestichezza allora anche l'IDE può aver senso, visto che a quel punto saprai *bene* ciò che starai facendo.


    CITAZIONE (Kohei @ 27/4/2016, 20:49) 
    In questi giorni sto sviluppando un'applicazione, precisamente un WYSIWYG amatoriale che, alla pressione di un jButton, mi genera il codice corrispondente al rispettivo tag. Vorrei realizzare un'interfaccia grafica più carina e soprattutto che sia univoca su tutti i sistemi operativi. Il L&F Nimbus non mi piace molto e preferirei personalizzare ciascun singolo componente. Ma se per i jButton è possibile farlo utilizzando un'immagine, la stessa cosa non posso farla per un componente quale il jComboBox.

    Dovresti mostrare del codice; senza esso è complicato poter rispondere. Il L&F puoi cambiarlo, ne esistono un sacco (compreso quello di default del sistema). Puoi anche scaricarne dalla rete. Potrebbe interessarti il Cross Platform (Metal, è il suo nome). Qui puoi trovarne alcuni "recensiti": www.jwrapper.com/blog/6-great-look-...java-app-pretty
    Ne troverai sicuramente altri in rete, come ad esempio JTatoo: www.jtattoo.net/ScreenShots.html

    CITAZIONE (Kohei @ 27/4/2016, 20:49) 
    Ho letto dell'esistenza di JavaFX, però non credo sia ancora il momento di spingermi a tanto, per quanto la tentazione sia forte dal momento che prevede l'utilizzo di un foglio di stile .css per gestire la grafica.Mi chiedo quindi se sia possibile in qualche modo ottenere qualcosa di simile e personalizzato utilizzando gli Swing.

    JavaFX lo utilizzai anni fa, quando era ancora a sè stante. Non ho esperienze pratiche con questa libreria attualmente, quindi non saprei consigliarti al meglio. La cosa certa è che è molto diverso dall'utilizzo di Swing, quindi potresti leggerti un pò le basi di AWT e poi dare un occhio a JavaFX... se non ti ispira, passi a Swing. Personalmente ho provato a rimetterci mano qualche mese fa per curiosità, ma visto il poco tempo ho abbandonato subito: è molto diversa sintatticamente rispetto a Swing. Qui trovi tutto: http://docs.oracle.com/javase/8/javase-cli...echnologies.htm
     
    .
  3.      
     
    .
    Avatar

    Mr. Canotta

    Group
    Member
    Posts
    3,228
    Reputazione
    0
    Location
    Hiroshima

    Status
    Ciao, grazie per la risposta e scusami se ti ho risposto a distanza di tanto tempo, ma stavo appunto preparando l'esame di Java XD Prima di tutto ti faccio vedere la GUI che ho realizzato (te la mostro in formato immagine).



    Praticamente è come se fosse il creatore di topic per Forumfree. Nulla di particolarmente complesso alla fine, ma volevo riuscire a personalizzare ancora di più la grafica. Preferirei mantenermi su qualcosa di flat/minimal, ma ho notato che, giustamente, sugli altri computer che non usano Windows 10, si vede diversamente. Da qui il voler cambiare il L&F per renderlo uguale su tutti i sistemi operativi. Ad esempio il jComboBox è quello che differisce maggiormente, ma son davvero limitato nella personalizzazione.

    Cosa mi consigli?
     
    .
  4.      
     
    .
    Avatar

    Senior Member

    Group
    Manager
    Posts
    10,796
    Reputazione
    +266

    Status
    Hai provato a cambiare L&F? Magari Metal proprio. Dai un occhio a questa pagina: http://docs.oracle.com/javase/tutorial/uis....html#available
    Dipende che problema hai con il JComboBox. E' il suo colore? Se vuoi puoi cambiarlo utilizzando setBackground().
     
    .
  5.      
     
    .
    Avatar

    Mr. Canotta

    Group
    Member
    Posts
    3,228
    Reputazione
    0
    Location
    Hiroshima

    Status
    Provo il Metal e ti faccio sapere. Se non sbaglio avevo scartato questo l&f perché c'erano le sfumature, nonostante sia l'unico che si mantenga uguale ovunque. Il background non posso cambiarlo sul l&f Windows. Rimane di colore grigio.
     
    .
  6.      
     
    .
    Avatar

    Senior Member

    Group
    Manager
    Posts
    10,796
    Reputazione
    +266

    Status
    Il background di un componente si può cambiare. Se non vedo il codice che hai scritto però mi riesce difficile esserti d'aiuto. Provo a scriverti un esempio:

    CODICE
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.plaf.ColorUIResource;

    class Example extends JFrame {
     private JComboBox<String> comboBox;
     
     Example() {
       super("Esempio");
       UIManager.put("ComboBox.background", new ColorUIResource(Color.CYAN));
       UIManager.put("ComboBox.selectionBackground", new ColorUIResource(Color.CYAN));
       
       // Pannello contenitore
       JPanel panel = new JPanel();
       panel.setOpaque(true);
       panel.setBackground(Color.WHITE);
       
       // Primo elemento: combobox con renderer personalizzato
       comboBox = new JComboBox<String>(new String[]{"A", "B", "C"});
       comboBox.setPreferredSize(new Dimension(80,30));
       comboBox.setRenderer(new ComboBoxRenderer());

       panel.add(comboBox);

       add(panel);
       
       
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     }
     
     public static void makeGUI() {
       
       
       Example e = new Example();
       e.setSize(300,200);
       e.setVisible(true);
     }
     
     
     public static void main(String[] args) {
       try {
         SwingUtilities.invokeAndWait(new Runnable() {
           public void run() {
             makeGUI();
           }
           
         });
       } catch(Exception e) {}
     }
     
     
     /*
      * Con un renderer personalizzato puoi anche personalizzarti tutti gli altri aspetti,
      * come le posizioni del testo, i colori etc
      */
     
     class ComboBoxRenderer extends JLabel implements ListCellRenderer<Object> {
       
       public ComboBoxRenderer() {
           setOpaque(true);
           setHorizontalAlignment(CENTER);
           setVerticalAlignment(CENTER);
       }

       public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

         setText(value.toString());

         if (isSelected) {
             setBackground(Color.WHITE);
         } else {
             setBackground(Color.GREEN);
         }

         return this;
       }
     }
    }


    first

     
    .
  7.      
     
    .
    Avatar

    Mr. Canotta

    Group
    Member
    Posts
    3,228
    Reputazione
    0
    Location
    Hiroshima

    Status
    Appena torno a casa vedo di provare il codice, molto pulito e chiaro. Mi sa che hai ragione sul fatto di creare la GUI senza tool.
     
    .
  8.      
     
    .
    Avatar

    Senior Member

    Group
    Manager
    Posts
    10,796
    Reputazione
    +266

    Status
    Quando hai news posta pure. ;)
     
    .
  9.      
     
    .
    Avatar

    Mr. Canotta

    Group
    Member
    Posts
    3,228
    Reputazione
    0
    Location
    Hiroshima

    Status
    Sì, vedo di finirlo e poi ti chiedo delle cose postandoti il codice completo!
     
    .
8 replies since 27/4/2016, 19:49   191 views
  Share  
.
Top