2010-05-23 8 views
1

J'ai une applet Java et le seul aspect et la sensation qui fonctionne correctement est le mac natif. Je voulais rendre les polices un peu plus grandes et j'ai essayé d'utiliser les méthodes UIManager standardL'apparence native de Java Mac OSX respecte-t-elle les modifications apportées aux polices UIManager?

UIManager.put ("Label.font", new Font ("Georgia", Font.PLAIN, 18));

Ceci ne produit aucun changement. Il n'y a pas d'exception, bien sûr.

Est-ce que quelqu'un sait si l'aspect et la convivialité du mac natif ignorent ceux-ci?

Je sais qu'il existe des moyens spécifiques pour rendre les contrôles de différentes tailles sur mac, mais ceux-ci semblent les rendre plus petits. Vous ne pouvez pas rendre les contrôles plus grands que réguliers.

Répondre

1

Il semble fonctionner sur Mac OS X avec un L installé & F.

Addendum: Si vous essayez de changer le réglage après le démarrage, voir How to Set the Look and Feel sous Changing the Look and Feel After Startup.

public final class Laf { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame f = new JFrame(); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       UIManager.put("Label.font", new Font("Georgia", Font.PLAIN, 18)); 
       f.add(new JLabel("Test")); 
       f.pack(); 
       f.setVisible(true); 
      } 
     }); 
    } 
} 

public final class LafApplet extends JApplet { 

    @Override 
    public void init() { 
     UIManager.put("Label.font", new Font("Georgia", Font.PLAIN, 18)); 
     this.add(new JLabel("Test")); 
    } 
} 
+1

Il peut être plus sûr d'utiliser une FontUIResource au lieu d'une police. Voir la démo fournie. – camickr

+0

Je le fais un JApplet et je le mets dans l'init et ne le change pas. Cela fonctionne avec Metal Look and Feel mais j'ai réussi cela en créant une classe enfant de métallookand. Depuis deux personnes pensent que cela fonctionne même avec le look natif de mac, je vais essayer à nouveau. merci –

+0

Cela fonctionne pour tous les L & Fs dans le 'JApplet' ci-dessus, sous réserve du point soulevé par @camickr. – trashgod

1

La méthode updateComponentTreeUI (...) (référencé dans la modification de la LAF Après liaison de démarrage fourni par trashgod) ne fonctionne que sur un FontUIResource, pas de police. Ceci n'est utile que si vous devez changer la police plusieurs fois après le démarrage.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 
import javax.swing.plaf.*; 

public class ChangeFont extends JFrame 
{ 
    private int size = 12; 
    private JComponent component; 

    public ChangeFont() 
    { 
     JTextArea textArea = new JTextArea(); 
     textArea.append("updateComponentTreeUI will only work on a FontUIResource\n\n"); 
     textArea.append("1) click the FontUIResource button as many times as you want\n"); 
     textArea.append("2) after you click the Font button, neither button will work"); 
     getContentPane().add(textArea, BorderLayout.NORTH); 

     JButton west = new JButton("FontUIResource"); 
     west.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       update(new FontUIResource("monospaced", Font.PLAIN, size)); 
      } 
     }); 
     getContentPane().add(west, BorderLayout.WEST); 

     JButton east = new JButton("Font"); 
     east.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       update(new Font("monospaced", Font.PLAIN, size)); 
      } 
     }); 
     getContentPane().add(east, BorderLayout.EAST); 

     component = new JTable(5, 5); 
     getContentPane().add(component, BorderLayout.SOUTH); 
    } 

    private void update(Font font) 
    { 
     UIManager.put("Table.font", font); 
     UIManager.put("TextArea.font", font); 
     SwingUtilities.updateComponentTreeUI(this); 
     size += 2; 
     pack(); 
    } 

    public static void main(String[] args) 
    { 
     ChangeFont frame = new ChangeFont(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

Je ne le savais pas. Bon exemple! – trashgod