Newsgroup: it.comp.java
Titolo: Font di default

C'è un metodo che restituisce il font di default con cui verrebbero
visualizzate le Label, se non indicato diversamente? Mi serve qualcosa tipo
"Font miofont=fontdisistema;", in modo che poi si possa modificare solo
stile e, volendo, dimensioni.
N.B. Il tutto, in un oggetto di tipo Frame.

Come dire, mi serve qualcosa tipo
Font miofont=new Font([lo stesso nome del Font di default],Font.BOLD,[la
dimensione del Font di default]+2);
Il tutto, da applicare alla Label intro con:
intro.setFont(miofont);
La Label è in un Frame aperto da un'Applet. Per font di default intendo,
ovviamente, quello che viene usato per Label, Button, ecc. ecc. quando non
definito diversamente (non è detto che sia lo stesso per tutti i PC,
ovviamente).
Ma non c'è proprio nessuno che mi possa rispondere? Che ci metto al posto
delle espressioni in parentesi quadra?

PROPRIO NON CAPISCO COME PROCEDERE... Ho trovato questo su
http://www.troppoavanti.it/javanotes.it/c5/s4.html
:
...č possibile ottenere dal contesto grafico g la font corrente richiamando
g.getFont(), che ritorna un oggetto di tipo Font. La font corrente di un
contesto grafico appena creato dipende dal sistema. Alle volte č utile avere
delle versioni modificate di una font, per cui nella classe Font ci sono dei
metodi che aiutano a modificare una font:
          Font F = g.getFont();
          Font boldFont = new Font(F.getName(), Font.BOLD, F.getSize());
Č quello che serve a me, solo che io non ho un contesto grafico, ma un Frame
con Label e altro, e se al posto di g metto il nome (intro) dell'etichetta a
cui applicare il corsivo (Font F = intro.getFont() ecc.), nonostante il
compilatore non segnali nessun errore, l'applet non fa piů aprire la
finestra (si genera, evidentemente, qualche eccezione).

Niente da fare. Ho provato con:
Label intro = new Label(frase,Label.CENTER);
Graphics g = intro.getGraphics();
Font font=g.getFont();
Font miofont=new Font(font.getName(),Font.BOLD,font.getSize());
In compilazione tutto OK, ma in esecuzione ottengo
java.lang.NullPointerException
        at finestra.contenuto(Compiled Code)
        at brani.init(brani.java:763)
        at sun.applet.AppletPanel.run(Compiled Code)
        at java.lang.Thread.run(Thread.java:479)
MA NON C'È PROPRIO NESSUNO CHE MI POSSA DARE UNA MANO???

...


 Una volta trovato il Frame ti puoi far dare il suo font.
Non ho capito nei dettagli, il sono "dentro" il Frame. La struttura che
avevo provato ad utilizzare è la seguente:
class finestra extends Frame
...
 {
  public finestra(AppletContext appletContext) //costruttore; crea la
finestra
   {...}
  public void contenuto (...) //inserisce gli elementi della finestra
   {
    ...
   Graphics g = intro.getGraphics(); //chiedo il contesto grafico della
Label intro
    Font font=g.getFont(); //il Font del contesto grafico
    Font miofont=new Font(font.getName(),Font.BOLD,font.getSize()); //Font
come quello del contesto grafico, salvo per il fatto di essere in grassetto
  }//fine metodo contenuto
 }//fine class finestra
La mia procedura segue una traccia contenuta in
http://www.troppoavanti.it/javanotes.it/c5/s4.html
; il compilatore non trova
nulla da eccepire, ma in esecuzione con Appletviewer ottengo errore:
java.lang.NullPointerException; la finestra quindi non si apre neppure.
Sembra che non esista il Font della Label. Il problema potrebbe essere: cosa
metto prima di getGraphics()? Forse nulla, perchè comunque la richiesta è
interna alla class Finestra? Forse this; ma ha senso usarlo all'esterno di
un costruttore? Ma perchè intro.getGraphics() non va bene? Una Label non è
un elemento di tipo Component? Boh... Il problema è che un Frame aperto da
un'Applet formalmente un contesto grafico, e getFont() è un metodo dei
contesti grafici... e io proprio non so come indicare il contesto grafico
(predefinito; io non ho definito alcun Font, in generale) di una Label...

 come quello del contesto grafico, salvo per il fatto di essere in
grassetto
... ovviamente, segue:
 intro.setFont(miofont);
...

...


 intro.setFont(miofont);
Ho seguito il tuo suggerimento (che riporto qui sopra, adattato al mio
programma). Hai ragione, con JLabel al posto di Label scompare l'eccezione;
l'unico problema è che la scritta diventa del colore di background del
pannello. Sembra che le istruzioni:
Panel n = new Panel();
Color celeste=new Color(189,255,255);
n.setBackground(celeste);
abbiano effetto non solo sul colore di sfondo del pannello, ma anche sulla
scritta dellla JLabel...
Tanto per capirci:
1) 
http://www.soloclassica.it/java/java.htm
 (con JLabel, seguendo il tuo
suggerimento... a meno non riesca, nel frattempo, a settare il colore)
2) 
http://www.soloclassica.it/java.htm
 (con Label, ma indicando
esplicitamente nome e dimensione del Font; ovvero: Font miofont = new
Font("Arial",Font.BOLD,12);)

 > intro.setFont(miofont);
...mi sembrava di aver risolto il problema del colore aggiungendo la riga
"intro.setForeground(Color.black);", ma mi sono accorto che (è la prima
volta che mi capita), mentre con appletviewer
http://www.soloclassica.it/java/java.htm
 riesco a far funzionare l'applet,
Internet Explorer non ne vuole proprio sapere... Possibile che la mescolanza
di JLabel (nel Panel - o fosse pure un JPanel - a North) e Label, Botton,
ecc. crei qualche problema al browser?

 riesco a far funzionare l'applet, Internet Explorer non ne vuole proprio
sapere...
Svelato il mistero... il Java su Sun apre la finestra... quello di
Microsoft, no... e così, eccoci di nuovo al punto di partenza...

...


 Comunque...sembra non sia una buona idea mescolare awt e swing
Io ho imparato da tante parti diverse, non ho una chiara percezione di cosa
sia awt, e cosa swing.
Ho utilizzato, nel Frame, Label, Button, Checkbox, CheckboxGroup, Menubar,
Menu, Menuitem; per aprire i link ho usato
"appletContext.showDocument(url,dove);". Cosa, di tutto questo, riguarda
swing, esattamente? O parlavi solo delle JLabel? In realtà mi sembrava di
aver letto che i link dei menù funzionano solo con swing, e non con awt;
però, se ti dovessi dire, non saprei esattamente cosa ho usato di awt e cosa
di swing...