问题
I'm trying to make the menu bar items and the items of the items bigger and smaller, I've seached here a bit before (so don't mark this as repeated please) and none of the posts I've found are working.
I've tried the following codes without success:
Font f = new Font("sans-serif", Font.PLAIN, 12);
UIManager.put("menuBar.font", f);
And
menuBar.setFont(new Font(menuBar.getFont().getFontName(), menuBar.getFont().getStyle(), 12));
And this is my code where I'm trying to edit the font:
private class foo{
private JMenu mnArchivo;
private JMenuBar menuBar;
menuBar = new JMenuBar();
frmAdministracinHospital.setJMenuBar(menuBar);
JRadioButtonMenuItem rdbtnmntmGrande = new JRadioButtonMenuItem("Grande");
rdbtnmntmGrande.addActionListener(new MiGrandeActionListener());
rdbtnmntmGrande.setIcon(new ImageIcon(PrincipalWindow.class.getResource("/presentacion/fontbig.png")));
buttonGroup.add(rdbtnmntmGrande);
mnTamanoFuente.add(rdbtnmntmGrande);
private class MiGrandeActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
Font f = new Font(menuBar.getFont().getFontName(), menuBar.getFont().getStyle(), 12);
UIManager.put("Menu.font", f);
}
}
Any clue please?
回答1:
That's because there's not "menuBar.font"
key in the UIManager class, it should be:
UIManager.put("MenuBar.font", f);
i.e. Caps are important or:
UIManager.put("MenuItem.font", f);
for each JMenuItem
's font
Here's a list of these properties
Also related: Changing a JMenuBar's font
EDIT: Added mcve
I don't see where it's not working, if I run this code, it works fine for me
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class UIManagerFontChangeExample {
private JFrame frame;
private JLabel label;
private JMenuItem item1, item2;
private JMenu menu;
private JMenuBar bar;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Font f = new Font("sans-serif", Font.PLAIN, 12);
UIManager.put("Menu.font", f);
UIManager.put("MenuItem.font", f);
UIManagerFontChangeExample example = new UIManagerFontChangeExample();
example.createAndShowGui();
}
});
}
public void createAndShowGui() {
frame = new JFrame("Font changing example");
label = new JLabel("This is a label");
bar = new JMenuBar();
menu = new JMenu("Menu");
item1 = new JMenuItem("Item1");
item2 = new JMenuItem("Item2");
menu.add(item1);
menu.add(item2);
bar.add(menu);
frame.add(label);
frame.setJMenuBar(bar);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Before changing font:
After changing font:
The code I added above is called: Minimal, Complete and Verifiable Example, next time, please post a valid one, the same I did, so we can copy-paste, I didn't use an actionListener
because the question isn't related to the actions, but the font. Or Icon
because it's not related either, I did a full example code that you can copy-paste and see how it works, without modifying anything, that's what you were asked for.
For the MenuBar
font you need to call:
UIManager.put("Menu.font", f);
And for the MenuItem
UIManager.put("MenuItem.font", f);
回答2:
If you're updating UI Manager properties on the fly (such as after your GUI has appeared), you'll need to make a call to SwingUtilities.updateComponentTreeUI(Component)
after you set the property UI Manager property. You'll want to pass in the highest level component you want to refresh (in this case, probably your top level Window
or JFrame
).
来源:https://stackoverflow.com/questions/41351173/change-menu-bar-and-menu-items-font