Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [JAVA] - Problema look and feel

    Salve non è che qualcuno gentilemente mi speiga perchè nel codice che segue (che è già pronto alla compilazione e quindi consiglio di provare) il JDialog mostrato alla pressione del pulsante non ha il look and feel impostato correttamente come uguale a quello del frame principale ?
    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    public class ProvaFrame extends JFrame
    {
    	MyPanel panel;	
    	public ProvaFrame()
    	{
    		panel = new MyPanel(this);
    		
    		setContentPane(panel);
    		try
    		{
    			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    			
    	
    		 	SwingUtilities.updateComponentTreeUI(this);
    		}
    		catch(Exception e)
    		{
    			System.err.println("Impossibile impostare il LookAndFeel del sistema");	
    		}
    	}
    	public static void main(String [] args)
    	{
    		ProvaFrame frame = new ProvaFrame();
    		final int iInset = 50;
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    		frame.setBounds ( iInset, iInset, screenSize.width - iInset*2,
    							   screenSize.height - iInset*2 );
    		frame.setVisible(true);
    	}
    }
    class MyPanel extends JPanel implements ActionListener
    {
    	private ProvaFrame mainFrame;
    	private JDialog myDialog;
    	private JButton showButt;
    	public MyPanel(ProvaFrame mainFrame)
    	{
    		this.mainFrame = mainFrame;
    		System.out.print(mainFrame == null);//non è null come si vede!!
    		showButt = new JButton("mostra dialogo");
    		add(showButt);
    		showButt.addActionListener(this);
    		myDialog = new JDialog(mainFrame,"dialogo",true);
    		myDialog.setSize(200,200);
    		myDialog.setLocationRelativeTo(mainFrame);
    		
    	}
    	public void actionPerformed(ActionEvent event)
    	{
    		myDialog.setVisible(true);
    	}
    }
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    prova a mettere il settaggio del look and feel in un blocco static

    così a me funzia:

    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    public class ProvaFrame extends JFrame
    {
    static {
    	try
    		{
    			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());			
    	
    		}
    		catch(Exception e)
    		{
    			System.err.println("Impossibile impostare il LookAndFeel del sistema");	
    		}
    }
    	MyPanel panel;	
    	public ProvaFrame()
    	{
    		panel = new MyPanel(this);
    		
    		setContentPane(panel);
    	}
    	public static void main(String [] args)
    	{
    		ProvaFrame frame = new ProvaFrame();
    		final int iInset = 50;
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    		frame.setBounds ( iInset, iInset, screenSize.width - iInset*2,
    							   screenSize.height - iInset*2 );
    		frame.setVisible(true);
    	}
    }
    class MyPanel extends JPanel implements ActionListener
    {
    	private ProvaFrame mainFrame;
    	private JDialog myDialog;
    	private JButton showButt;
    	public MyPanel(ProvaFrame mainFrame)
    	{
    		this.mainFrame = mainFrame;
    		System.out.print(mainFrame == null);//non è null come si vede!!
    		showButt = new JButton("mostra dialogo");
    		add(showButt);
    		showButt.addActionListener(this);
    		myDialog = new JDialog(mainFrame,"dialogo",true);
    		myDialog.setSize(200,200);
    		myDialog.setLocationRelativeTo(mainFrame);
    		
    	}
    	public void actionPerformed(ActionEvent event)
    	{
    		myDialog.setVisible(true);
    	}
    }
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Niente da fare,purtroppo non devo usare il look and feel di windows ma un'altro che va istanziato,inoltre devo impostare un tema di quel look and feel con un metodo non static,quindi questa soluzione funziona nel codice che ti ho postato (e quindi con i dati che avevi a disposizione hai risolto il problem a,bravo),ma non per quello che effettivamente ti serve.Ti ho postato un esempio semplificato in modo che potessi eseguire il codice (il vero è trioppo grosso)
    Non è che hai altre idee ?Ad esempio come sei arrivato a questa soluzione parziale,con che ragionamento?Insomma perchè funziona,e che problemi collaterali può dare (se ne da)?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Problemi collaterali non dovrebbe darne, almeno a me non ne ha mai dati.
    Il ragionamento che ho seguito lo fatto quando ho avuto un problema simile: una JFileChooser era con look and feel windows e metal misto, quindi ho spostato il comando per settare il look and feel sempre prima, è la prima cosa che viene fatta è nel blocco static, quindi ho sempre messo li la modifica del laf.
    Cmq che laf devi usare? getSystemLookAndFeelClassName() da il nome del laf dell'OS n uso.
    Altre idee dovrebbero essere in JAVA_HOME\demo\jfc\SwingSet2\, questo programma di esempio distribuito con il jdk mostra l'uso di swing in generale, tra cui il cambiamento del laf anche dinamicamente.

    Forse non ho capito il problema.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    SwingSet2 lo conosco bene,lo uso sempre ma stavolta non c'è nulla che mi aiuti,nemmeno nei tutorial della sun ho trovato nulla di utile.Il look and feel in questione bisogna istanziarlo con new ,non basta scriverne il percorso completo nel package nella setLookandfeel() come al solito.Vabbè comunque ora ho risolto anche se in maniera non proprio idilliaca,ho risettato il look and feel e richiamato updateComponentUi con il rootPane del JDialog.Oara funge.Il fatto è che non ci dovrebbe essere bisogno in teoria,vabbè mi accontento.
    Grazie cmq e se ti viene in mente qualcosa sono quì
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  6. #6
    Cavolo anche questa soluzione non va bene,ora mi da problemi collaterali.Quando premo un bottone nel dialogo il colore del tema se ne va e non torna più,mi tocca eliminare il setting del look and feel per il dialogo e trovare il modo per farglielo discendere dal root pan dell'applicazione come dovrebbe essere.Help me please,non ho più idee
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  7. #7
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    non potresti fare un istanza del l&f statica e metterla nel blocco static?

    Se puoi, posta il pezzo di codice che istanza il l&f.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  8. #8
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    La cosa migliore, che dovrebbe funzionare, almeno a me funziona, è settare il look and feel prima della creazione di oggetti grafici, quindi in modo statico, ad esempio nel metodo main,


    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  9. #9
    codice:
    public class AppFrame
    {
    private KunststoffLookAndFeel klaf = new KunststoffLookAndFeel();
    
    public AppFrame() 
    {
    	super("Creatore di preventivi");
    		
    	setContentPane(prevEditor);
    	
    	// Imposta il LookAndFeel.
    
    
    	setKunststoffTheme("Sun.theme");
    	        ...........
    }
    private void setKunststoffTheme(String theme) 
    {
            try 
    	{
            	KunststoffLookAndFeel.setCurrentTheme(new PropertiesMetalTheme(getClass().
            			getResourceAsStream("/themes/"+theme)));
            	UIManager.setLookAndFeel(klaf);
                SwingUtilities.updateComponentTreeUI(getRootPane());
            } 
            catch (UnsupportedLookAndFeelException e) 
    	{
            	e.printStackTrace();
            }
    }
    }
    Il codice è questo.Il problema è che il dialogo viene creato e mostrato in una classe pannello contenuta a sua volta nel pannello principale del frame (impostato come content pabne di appFrame),il dialogo non riceve il look and feel con questo codice.Se io creassi e mostrasi il dialogo direttamente in appFrame inspeigabilmente tutto funzionerebbe,è anche questo che mi sconvolge.Grazie dell'aiuto
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  10. #10
    codice:
    La cosa migliore, che dovrebbe funzionare, almeno a me funziona, è settare il look and feel prima della creazione di oggetti grafici, quindi in modo statico, ad esempio nel metodo main,
    Si ma i metodi come getClass() e getRootPane non possono funzionare in un metodo statico come il main.
    Spero che riusciate ad aiutarmi perchè mi sta proprio facendo arrabbiare sta cosa.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.