Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Problema look & feel

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315

    Problema look & feel

    Salve,
    ho una applicazione che fino a poco tempo fa girava su Windows XP; in questa applicazione uso come look & feel

    codice:
    UIManager.setLookAndFeel(
                    UIManager.getSystemLookAndFeelClassName());
    Adesso questa applicazione deve girare su Windows 7 e succede che alcune proprietà su JLabel, JComboBox, ecc.. non vengono più rispettate, come ade esempio il setBackground su una combobox che adesso vedo sempre grigia.

    Non potendo cambiare il look & feel, come posso uniformare i due comportamenti?

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Se vuoi che l'interfaccia sia la stessa su tutte le piattaforme devi usare il CrossPlatformLookAndFeel.

    Però mi par strano che il L&F sovrascriva una property che hai settato tu. Come/quando/dove le imposti le property che non ti vengono rispettate?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315
    In effetti il CrossPlatformLookAndFeel corrisponde a quello che voglio io...ho provato e funziona.

    Io vorrei ottenere lo stesso effetto senza cambiare il L&F.

    In ogni caso, per rispondere alla tua domanda, io non penso che il L&F modifichi la property del mio oggetto, secondo me è solo un problema di visualizzazione.

    Con CrossPlatformLookAndFeel ottengo proprio quello che voglio io.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da koala81
    Io vorrei ottenere lo stesso effetto senza cambiare il L&F.

    In ogni caso, per rispondere alla tua domanda, io non penso che il L&F modifichi la property del mio oggetto, secondo me è solo un problema di visualizzazione.
    Il "System" LookAndFeel di Windows è implementato nel package com.sun.java.swing.plaf.windows
    Se hai installato un JDK, nella sua "home" dovresti avere un src.zip. Spacchettalo e guarda il sorgente della classe com.sun.java.swing.plaf.windows.WindowsComboBoxUI
    Magari ci trovi qualche indizio utile. Io l'ho guardato ma molto velocemente (non ho tempo ora).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Potresti dare qualche informazione in più? Parli di "alcune proprietà su JLabel, JComboBox", ma non specifichi quali proprietà visive... è un po' difficile cercare di aiutarti.

    L'unica informazione precisa che hai dato riguarda lo sfondo di un JComboBox... una delle pochissime proprietà dei componenti che, in pratica, non serve a nulla (impostare lo fondo su un JComboBox non ha alcun effetto né su WinXP, né su Seven, né su Win Server 2003, ecc) perchè una JComboBox è un componente particolare, che contiene elementi renderizzati tramite renderer. Anche forzare un setOpaque() non ha alcun effetto.

    Lo si può facilmente vedere da questo banalissimo esempio:
    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class MiaFinestra extends JFrame {
    
       public MiaFinestra() {
          Container c = getContentPane();
          c.setLayout( null );
    
          JLabel lbl = new JLabel("Ciao");
          lbl.setHorizontalAlignment( JLabel.CENTER );
          lbl.setBackground( Color.RED );
          lbl.setOpaque( true );
          lbl.setBounds(40, 40, 130, 30);
    
          JComboBox jcb = new JComboBox( new String[]{"Uno", "Due", "Tre"} );
          jcb.setBackground( Color.GREEN );
          jcb.setOpaque( true );
          jcb.setBounds(40, 140, 130, 30);
    
          c.add( lbl );
          c.add( jcb );
    
          setTitle("Prova");
          setSize(800, 600);
          setDefaultCloseOperation( EXIT_ON_CLOSE );
          setLocationRelativeTo( null );
          setVisible( true );
       }
    
       public static void main(String[] args) {
          try {
             UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
          } catch (Exception e) { /* L&F */ }
          try {
             SwingUtilities.invokeLater( new Runnable() {
                @Override
                public void run() {
                   MiaFinestra mf = new MiaFinestra();
                }
             });
          } catch (Exception e) { e.printStackTrace(); }
       }
    }
    Qui la finestra su WinXP:
    http://gyazo.com/2efd36d3145eba4b810c664889840e1f.png

    Qui la finestra su Win Server 2003:
    http://gyazo.com/ba900c15d46792ddd4d6cba4e6ecdfee.png

    Qui la finestra su Win 7:
    http://gyazo.com/53c1501589fff6c086e59653d5c1aac5.png

    La label viene visualizzata correttamente con sfondo rosso su tutti i sistemi, mentre la JComboBox è senza alcuno sfondo su tutti i sistemi (perchè, appunto, setBackground() su un JComboBox non ha alcun senso).

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.