Font java

di il
13 risposte

Font java

Ciao ragazzi.
Sto cercando di mettere un titolo al mio JFrame.
La questione è che i caretteri che ho ha disposizione, non mi stanno bene, cosi ne aggiungo altri.
Questi nuovi caratteri, devo copiarli nella cartella a cui fa riferimento il SO??
Dovrebbe essere cosi, perchè la JVM si avvale del SO.
La JVM è ad un livello macchina, che sta dopo il SO.

Cosi posso risolvere il problema, di un nuovo font.

Questo metodo però non è infallibile.
Se installo lo stesso software su un altra macchina, il problema si ripresenta.
Detto questo, la strada migliore è quella di incorporare il font nel software, quindi nel byteCode??
Se è possibile tutto questo, come si fa?

13 Risposte

  • Re: Font java

    Alexxandro ha scritto:


    Sto cercando di mettere un titolo al mio JFrame.
    La questione è che i caretteri che ho ha disposizione, non mi stanno bene, cosi ne aggiungo altri.
    Se intendi il titolo come da get/setTitle() dei frame, i font non c'entrano molto. Beh sì c'entrano, nel senso che il titolo sulla barra della finestra è visualizzato con un certo font di carattere ma sfortunatamente non lo puoi controllare da Java (sicuramente non "per finestra") e nemmeno in maniera globale, perlomeno con il solo framework di Java SE.

    Se invece intendi un titolo fatto da te con una label o altro, allora sì, il font lo puoi controllare.

    Alexxandro ha scritto:


    Questi nuovi caratteri, devo copiarli nella cartella a cui fa riferimento il SO??
    Detto questo, la strada migliore è quella di incorporare il font nel software, quindi nel byteCode??
    Se è possibile tutto questo, come si fa?
    Per tutti i componenti grafici che visualizzano testo è perfettamente possibile impostare un font, che può essere uno già installato nel sistema, oppure uno che puoi caricare espressamente per la tua applicazione usando il createFont() di java.awt.Font.

    Non mi è chiaro il contesto a cui ti riferisci. Se è quest'ultima opzione, vedi anche il mio esempio Digital Clock
  • Re: Font java

    Scusami se ti scoccio...
    Sto cercando un metodo chei centri il titolo, nel JFrame.
    Cioè con JLabel ho definito un titolo.
    con
    
    System.out.println("          Mio Titolo");
    
    lo stampo a video sulla finestra.
    Però per centrarlo sono costretto a lasciare degli spazi.
    Come posso fare a dargli delle coordinate??

    un pò di pazienzxa... poi vado da solo
  • Re: Font java

    Non avevo capito bene il concetto di Container
  • Re: Font java

    Una JLabel può stare alla "giusta dimensione" per il testo ed essere centrata da qualche parte grazie ad un layout manager. Oppure se occupa molto più spazio del testo (sempre per via di un layout manager, es. è larga sempre quanto il frame) si può sfruttare la proprietà horizontalAlignment per controllare l'allineamento del testo nella label.

    Ma NON si mettono spazi per questo!
  • Re: Font java

    Ma, come si usa di preciso, su quale oggetto va utilizzato il medoto??.
    
                    Container pannelloJFrame = getContentPane();//
    		this.setLayout(new BorderLayout());
    		pannelloJFrame.setBackground(new Color(9,61,119));
    		
    		JPanel pannelloAlto = new JPanel();
    		pannelloAlto.setBackground(new Color(255,201,14));
    		
    		JLabel nomeProgramma = new JLabel("Mio TItolo");
    		Font fontTitolo = new Font("Hanging letters",Font.PLAIN,55);
    		nomeProgramma.setFont(fontTitolo);
    		nomeProgramma.setHorizontalAlignment(50);//MI DA ERRORE 
    		pannelloAlto.add(nomeProgramma);
    		pannelloJFrame.add(pannelloAlto,BorderLayout.NORTH);
                    ....
                    ....
                    setVisible(true)
    
    Quello sto cercando di fare è una finestra JFrame con un BorderLayout()
    La regione NORTH la dedico al nome del programma.
    Dedico anche un JPanel alla regione NORTH
    il JPanel contine il TITOLO
    il pannelloJFrame contine il JPanel ed il Jpanel contine il titolo
    add finale per vedere il risultato
    Non riesco a spostare il mio TITOLO a piacere nel JPanel...
    Titolo è un oggetto JLabel...
    non riesco a capire cosa non va
  • Re: Font java

    Alexxandro ha scritto:


    non riesco a capire cosa non va
    Innanzitutto il content pane del JFrame ha già per default un BorderLayout. Non c'è bisogno di settarne uno nuovo (se non è per configurare le sue proprietà hgap/vgap).

    Comunque ok, c'è un BorderLayout e nella parte NORTH metti un JPanel. Ma JPanel ha per default un FlowLayout, che fa stare i componenti alla loro dimensione "preferita" e li fa "fluire" eventualmente su più righe. Quindi: è quello che volevi?

    E poi c'è la questione del setHorizontalAlignment. Il punto è il valore. Che vuoi fare con 50?? Domanda: la leggi la documentazione javadoc ufficiale? È fondamentale leggerla! Se non la leggi ... non andrai molto lontano ...

    La documentazione di setHorizontalAlignment è chiara:
    alignment - One of the following constants defined in SwingConstants: LEFT, CENTER (the default for image-only labels), RIGHT, LEADING (the default for text-only labels) or TRAILING.
    Se il valore non è appropriato, lancia un bel IllegalArgumentException.

    Ma ripeto: essendo la label nel FlowLayout, la sua dimensione è "giusta" per il testo e il setHorizontalAlignment non cambierebbe proprio nulla. Devi chiarirti le idee sui layout manager.
  • Re: Font java

    Si infatti..
    qualcosa mi sfugge.
    il this.setLayout(), lo tengo li per ricordarmi che esiste.
    Non mi piaccione le automazioni che fa il compilatore, mi da di lavoro incompleto.
    chiamo anche con la super() il costruttore di una superClasse da una sottoClasse.
    sono maniacale ahahah
  • Re: Font java

    Ok, allora prova questo:
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Font;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.SwingConstants;
    import javax.swing.SwingUtilities;
    
    public class FramePrincipale extends JFrame {
        private JLabel labelTitolo;
    
        public FramePrincipale() {
            super("Frame Principale");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(400, 300);
    
            labelTitolo = new JLabel("Titolo");
            labelTitolo.setFont(new Font("Arial", Font.PLAIN, 30));
            labelTitolo.setBackground(new Color(255,201,14));
    
            getContentPane().add(labelTitolo, BorderLayout.NORTH);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new FramePrincipale().setVisible(true);
                }
            });
        }
    }
    Vedrai che il titolo compare con font grosso ma: a) non c'è il colore di sfondo e b) il titolo non è centrato.

    Le questioni infatti sono due:
    1) le label per default sono "non opache". Metti un

    labelTitolo.setOpaque(true);

    e vedrai il colore arancione che volevi.

    2) Ho messo JLabel direttamente nella parte NORTH (del BorderLayout che ha il content pane per default). Questo ha un effetto: la larghezza del JLabel occupa sempre tutta la larghezza del content pane/JFrame. Quindi può essere molto più larga del testo e pertanto l'allineamento orizzontale diventa importante. Metti un

    labelTitolo.setHorizontalAlignment(SwingConstants.CENTER);

    e vedrai il testo della label centrato.

  • Re: Font java

    Quindi la JLabel occupa tutta la riga?
    Ma se invece non volessi usare una costante?
    Non ho capito bene il main
    
    public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new FramePrincipale().setVisible(true);
                }
            });
    
    Mi sembra di capire che i layout Manager sono utilizzati per disporre tutti gli oggetti come i JButton, le checkBox, ecc
    E se volessi cambiare colore al mio carattere??
    Ci dovrebbe essere un metodo nella classe Font??invece no
  • Re: Font java

    Alexxandro ha scritto:


    Quindi la JLabel occupa tutta la riga?
    Sì, perché è in NORTH. Nel BorderLayout, NORTH e SOUTH hanno queste proprietà: la altezza è quella "preferita" del componente contenuto ma la larghezza NON dipende dal componente ma dalla larghezza del contenitore che ha il BorderLayout, nel tuo caso dal content-pane e quindi transitivamente dal frame.

    Alexxandro ha scritto:


    Ma se invece non volessi usare una costante?
    Costante cosa?

    Alexxandro ha scritto:


    Non ho capito bene il main
    
    public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new FramePrincipale().setVisible(true);
                }
            });
    
    Serve per far partire tutta la creazione della GUI nel contesto del EDT, Event Dispatch Thread. Abituati a questa forma.

    Alexxandro ha scritto:


    Mi sembra di capire che i layout Manager sono utilizzati per disporre tutti gli oggetti come i JButton, le checkBox, ecc
    Sì. Ciascun layout manager però ha i propri criteri/limiti/caratteristiche.

    Alexxandro ha scritto:


    E se volessi cambiare colore al mio carattere??
    Ci dovrebbe essere un metodo nella classe Font??invece no
    Nì, esiste effettivamente un uso "avanzato" dei Font che permette di settare dei TextAttribute sul font. Ma per il momento (consiglio spassionato), dimentica questo.

    Il colore di primo piano è innanzitutto una caratteristica dei componenti. Di nuovo la domanda: la leggi la documentazione javadoc? java.awt.Component (la classe "base" di TUTTI i componenti AWT/Swing) ha il

    public void setForeground(Color c)
  • Re: Font java

    Si la leggo la documentazione, ma non conosco bene l'inglese, più la confusione su layout manager ecc...
    avevo letto di setForegound(color c);
    solo che io insistevo a richiamarlo dall'oggetto font, mentre è metodo JLabel.

    A questo punto le regioni che mi indica il BorderLayout, sono una serie di JPanel
    Io ad esempio per creare la striscia arancione, ho pensato di creare un oggetto JPanel, da mettere a nord..
    stavo facendo tutto sbagliato
  • Re: Font java

    Alexxandro ha scritto:


    A questo punto le regioni che mi indica il BorderLayout, sono una serie di JPanel
    Io ad esempio per creare la striscia arancione, ho pensato di creare un oggetto JPanel, da mettere a nord..
    stavo facendo tutto sbagliato
    Sarebbe anche stato possibile raggiungere l'obiettivo con un JPanel in NORTH che contiene JLabel. Ma chiaramente sarebbe stato un po' più lungo, avresti un "contenitore" in più da gestire e un layout manager in più.

    Se volevi solo una barra colorata in alto, larga quanto il frame e con un testo centrato, la soluzione che ti ho mostrato è la più semplice.
  • Re: Font java

    Ok
    grazie per le dritte
Devi accedere o registrarti per scrivere nel forum
13 risposte