Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Java] Windows Look&Feel non funziona

    Buonasera a tutti,
    come da titolo, ho un problema con il look and feel windows delle javax.swing.
    Ho creato un programmino di esempio, per farvi capire:
    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class Esempio extends JFrame
    {
    	FlowLayout layout=new FlowLayout();
    	JTextField field=new JTextField(5);
    	JButton button=new JButton("Bottone");
    	JCheckBox checkbox=new JCheckBox("Checkbox");
    	public Esempio()
    	{
    		setVisible(true);
    		setSize(200,110);
    		setLocation(200,200);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		try{UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");}
    		catch(Exception e){e.printStackTrace();}
    		setLayout(layout);
    		add(field);
    		add(button);
    		add(checkbox);
    	}
    	public static void main(String[] args)
    	{
    		new Esempio();
    	}
    }
    Nella riga evidenziata in rosso c'è il codice che imposta il L&F.

    Il problema è che semplicemente non funziona , pare quasi che del Windows L&F abbia solo i colori (vedete questa immagine).

    Grazie per la pazienza
    Ciao
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    visto che sai a priori quale look and feel usare ti consiglio due cose (seguendo la linea dell'how to oracle http://download.oracle.com/javase/tu...feel/plaf.html )

    1. scegliere il look and feel come prima istruzione (in un certo senso è importante che venga settato prima che inizializzi componenti
    2. mettere fuori dal costruttore le dichiarazioni di variabili e dentro il costruttore le inizializzazioni, cioè

    codice:
    	FlowLayout layout;
    	JTextField field;
    	JButton button;
    	JCheckBox checkbox;
    
    	public Esempio(){
                     try{
                        UIManager.setLookAndFeel(
                             "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
                     } catch(Exception e){
                            e.printStackTrace();
                     }
                    layout =new FlowLayout();
    		field=new JTextField(5);
                    button=new JButton("Bottone");
                    checkbox=new JCheckBox("Checkbox"); 
                    setVisible(true);
    		setSize(200,110);
    		setLocation(200,200);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    		setLayout(layout);
    		add(field);
    		add(button);
    		add(checkbox);
    	}
    se devi runtime cambiare il look and feel devi provvedere al ridisegno di tutti i componenti grafici, ma penso che per il tuo caso ti basti metterlo come primissima istruzione

  3. #3
    Intanto chiedo scusa per il link dell'immagine sbagliato, ora l'ho corretto.

    Comunque grazie, ho seguito le tue istruzioni ed ora funziona bene
    Certo che mi pare una cosa fin troppo delicata...

    Grazie mille
    Ciao
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    una volta che capisci come funziona non lo è.

    Quando tu crei un oggetto swing, questo ha dentro di se delle "regole" per disegnarsi, regole che dipendono dal look and feel che usi (es bottone con bordo arrotondato e non squadrato) e che vengono lette alla creazione dell'oggetto e su richiesta dell'utente

    Ora metti che hai creato 10 componenti dicendogli di riferirsi alle regole X. poi cambi, i nuovi componenti si riferiranno giustamente alle regole Y, ma rischi di creare incongruenze per i 10 componenti iniziali. Per questo quando conosci a priori il look and feel è bene settarlo come prima istruzione, in modo tale che tutti guardino alle regole corrette.
    Puoi cambiare in corsa il look and feel, ma devi chiedere ai componenti di rivalidarsi, significa che devi dire: guarda che ho cambiato le regole grafiche, vattele a rileggere e disegnati correttamente.

    Non ho usato termini tecnici, mi scuso per le imprecisioni

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.