更改菜单栏和菜单项字体

时间:2016-12-27 19:37:03

标签: java swing fonts jmenuitem jmenubar

我正在尝试使菜单栏项目和项目的项目变得越来越小,我之前已经在这里进行过一段时间的搜索(所以请不要将其标记为重复请)并且我没有发布任何帖子发现正在发挥作用。

我尝试了以下代码但没有成功:

Font f = new Font("sans-serif", Font.PLAIN, 12);
UIManager.put("menuBar.font", f);

menuBar.setFont(new Font(menuBar.getFont().getFontName(), menuBar.getFont().getStyle(), 12));

这是我的代码,我正在尝试编辑字体:

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);
            }
        }

有任何线索吗?

2 个答案:

答案 0 :(得分:3)

那是因为UIManager类中没有"menuBar.font"键,它应该是:

UIManager.put("MenuBar.font", f);

即。上限很重要或:

UIManager.put("MenuItem.font", f);

表示每个JMenuItem的字体

以下是这些属性的list

还相关:Changing a JMenuBar's font

编辑:添加了mcve

我没有看到它无法正常工作,如果我运行此代码,它对我来说很好

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);
    }
}

在更改字体之前:

enter image description here

更改字体后:

enter image description here

我在上面添加的代码名为:Minimal, Complete and Verifiable Example,下次请发布有效的代码,我也一样,所以我们可以复制粘贴,我没有使用actionListener,因为问题与动作无关,而是与字体有关。或者Icon,因为它也没有关系,我做了一个完整的示例代码,你可以复制粘贴,看看它是如何工作的,不需要修改任何东西,这就是你所要求的。

对于您需要致电的MenuBar字体:

UIManager.put("Menu.font", f);

对于MenuItem

UIManager.put("MenuItem.font", f);

答案 1 :(得分:0)

如果您正在动态更新UI Manager属性(例如在GUI出现后),则在设置属性UI Manager属性后,您需要调用SwingUtilities.updateComponentTreeUI(Component)。您需要传递要刷新的最高级别组件(在这种情况下,可能是您的顶级WindowJFrame)。

相关问题