Newsgroup: it.comp.java
Titolo: LookAndFeel e JFrame estesi

Salve a tutti. :)
Ho creato un'applicazione formata (principalmente) da due file:
1 - Interfaccia grafica (che estende JFrame) ("public class Interfaccia
extends JFrame")
2 - Applicazione vera e propria che (nel main) CREA un oggetto Interfaccia
("Interfaccia finestra = new Interfaccia()")
Ora, io vorrei fare in modo che, nel costruttore di Interfaccia, venga
specificato il LookAndFeel (Metal) dell'interfaccia stessa, in modo che
quando l'applicazione crea l'oggetto finestra, questo abbia il lookandfeel
scelto.
Ho provato (ad inserire nel costruttore di Interfaccia) il seguente codice:
try {
  UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
  SwingUtilities.updateComponentTreeUI(getContentPane()); /* oppure "this"
*/
}
catch ( Exception e ) {
   e.PrintStackTrace();
}
Ora, c'è da dire che non solo, non funziona, ma non mi da neanche errore!!!
Vorrei specificare che nel costruttore di interfaccia io NON richiamo un
"super()" (come ho visto in alcuni codici) , semplicemente perchè l'oggetto
JFRAME viene già creato dall'applicazione (faccio bene?).
Come posso risolvere?
Grazie in anticipo,
Bye, Animanera. :)
--
Per le mie ricerche uso SOSPlanet.it
http://www.sosplanet.it
Il motore di ricerca dei motori di ricerca

JFRAME viene già creato dall'applicazione (faccio bene?).
Non capisco bene cosa vuoi dire qui.
Hai già letto il Tutorial, vero? Dal codice direi di sì :-)
Quello che segue funziona.
import java.awt.*;
import javax.swing.*;
public class Animanera extends JFrame {
    public Animanera() {
        super("Animanera");
// funziona anche mettendo quello che segue nel main
// e forse è meglio...
        try {
            UIManager.setLookAndFeel
(UIManager.getCrossPlatformLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(640, 480);
        buildGUI();
    }
 
    private void buildGUI() {
        Container c = this.getContentPane();
        c.setLayout(new BorderLayout());
        c.add(new JTextField("Del testo"), BorderLayout.NORTH);
        c.add(new JScrollPane(new JTextArea()), BorderLayout.CENTER);
    }
 
    public static void main(String[] args) {
        JFrame frame = new Animanera();
        frame.setVisible(true);
    }
}
HTH
-- 
Ciao
	Fabrizio C.

> Quello che segue funziona...
Ciao Fabrizio,
ti ringrazio tantissimo per il codice "personalizzato", ma...purtruppo non
funziona. :°°°-(
Però, documentandomi, mi sta venendo il dubbio di aver capito male e,
quindi, di essermi spiegato male.
Cercho di spiegami più chiaramente.
Da quanto ho capito, il look della mia applicazione E' in stile METAL.
Quello che NON LO E', invece, è il BORDO della finestra (che è in stile
Windows).
Io vorrei ottenere un risultato simile a quello che si vede nel demo
METALWORKS della j2sdk (che, tra l'altro, mi sembra di aver capito che è
personalizzabile nei colori, definendo un nuovo tema)
Come potrei ottenere questo risultato (sempre da una classe che estende
Jframe)?
Grazie infinite in anticipo, Bye, Animanera. :)

Jframe)?
Guardando la documentazione...
Ti do anche la scorciatoia ;-)
http://java.sun.com/j2se/1.4/docs/api/javax/swing/JFrame.html#setDefaul
tLookAndFeelDecorated(boolean)



http://java.sun.com/j2se/1.4/docs/api/javax/swing/JFrame.html#setDefaultLook
AndFeelDecorated(boolean)
Grazie mille, era proprio quello che ci voleva!
Infatti, ho potuto anche eliminare la dichiarazione del lookandfeel (visto
che, se ho capito bene, quello standard è proprio il Metal). Mi è bastato
aggiungere un javax.swing.JFrame.setDefaultLookAndFeelDecorated(true) per
risolvere.
L'unica cosa è che ho dovuto aggiungerlo nell'applicazione, e non nella
classe finestra  che estende Jframe, per il semplice fatto che questo
parametro ha effetto solo per i frame creati SUCCESSIVAMENTE. E quindi ho
dovuto inserirlo prima della creazione della finestra.
Volevo inserirlo nella finestra per tenere separate interfaccia e
applicazione vera a propria...vabbè, pazienza :)))
Grazie mille, bye, Animanera. :)