【问题标题】:Change menu bar and menu items font更改菜单栏和菜单项字体
【发布时间】:2016-12-27 19:37:03
【问题描述】:

我正在尝试使菜单栏项目和项目的项目越来越小,我之前在这里搜索过一点(所以请不要将其标记为重复)并且我没有任何帖子发现工作正常。

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

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

请问有什么线索吗?

【问题讨论】:

  • 您在代码中的哪个位置更改了字体?它是在 EDT 上执行的吗?当您说它不起作用时,您的意思是项目的外观完全没有变化还是没有像预期的那样?
  • 我添加了一些代码@Calculator
  • 可能毫无意义的问题:您是否尝试过使用其他字体大小? 12 是默认值。
  • 是的,我认为默认值为 11,至少对于 JLabel 而言

标签: java swing fonts jmenuitem jmenubar


【解决方案1】:

那是因为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);
    }
}

更改字体之前:

更改字体后:

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

对于MenuBar字体你需要调用:

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

对于MenuItem

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

【讨论】:

  • 还是不行,是不是应该是我的菜单栏组件的名字,就是menuBar?
  • 这不是您的组件的名称,而是属性的名称。它会改变你的JMenuBar全部,我建议你检查MenuItem并使用更大的字体来检查它,如果它仍然不起作用,请提供一个有效的minimal reproducible example跨度>
  • 还是一样的 :/ ,如果它也应该与 JLabel 一起使用,我也想知道,但我也尝试过,但也不起作用。我唯一的代码是组件和监听器的声明,我还要添加吗?
  • 请阅读 minimal reproducible example 是什么,即一个小程序,它有 1 个 JMenu,可能有 1 个或 2 个 JMenuItems 和一个 JLabel,你可以在其中展示你的变化字体
  • 但我真正想改变的是字体大小
【解决方案2】:

如果您正在即时更新 UI 管理器属性(例如在您的 GUI 出现之后),您需要在设置属性 UI 管理器属性后调用 SwingUtilities.updateComponentTreeUI(Component)。您需要传入要刷新的最高级别组件(在这种情况下,可能是您的最高级别 WindowJFrame)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多