gpt4 book ai didi

java - Swing - 在运行时更改菜单栏和菜单项字体大小

转载 作者:行者123 更新时间:2023-12-01 21:09:54 25 4
gpt4 key购买 nike

如标题所示,我需要使用 SWING 更改菜单栏及其上的每个项目(以及项目的项目)的字体大小。

我有以下代码,该代码可以工作,但不能在运行时运行,我需要在单击菜单项时使用它

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

我的菜单代码是

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

我还没有发现任何在运行时执行此操作的类似问题,我怎样才能实现这一点?

编辑。代码添加不会多次更改字体大小。

package presentacion;

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.SystemColor;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import dominio.Appointment;
import dominio.Patient;
import dominio.Specialist;


public class pepe {

private JFrame a;
private JTabbedPane tabbedPane;
private JMenuBar menuBar;
private final ButtonGroup buttonGroup = new ButtonGroup();


public pepe() {
initialize();
a.setVisible(true);
}

public static void main(String[] args) {

try {
// Set System L&F
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
}
catch (UnsupportedLookAndFeelException e) {
// handle exception
}
catch (ClassNotFoundException e) {
// handle exception
}
catch (InstantiationException e) {
// handle exception
}
catch (IllegalAccessException e) {
// handle exception
}

EventQueue.invokeLater(new Runnable() {
public void run() {
try {
pepe window = new pepe();
window.a.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

private void initialize() {
a = new JFrame();
a.setTitle("Administraci\u00F3n Hospital");
a.setBounds(100, 100, 1195, 710);
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

tabbedPane = new JTabbedPane(JTabbedPane.TOP);
tabbedPane.setBackground(SystemColor.info);

menuBar = new JMenuBar();
a.setJMenuBar(menuBar);

JMenu mnVer = new JMenu("Ver");
menuBar.add(mnVer);

JMenu mnTamanoFuente = new JMenu("Tama\u00F1o fuente");
mnVer.add(mnTamanoFuente);

JRadioButtonMenuItem rdbtnmntmPequeo = new JRadioButtonMenuItem("Peque\u00F1o");
rdbtnmntmPequeo.addActionListener(new MiPequenaActionListener());
buttonGroup.add(rdbtnmntmPequeo);
mnTamanoFuente.add(rdbtnmntmPequeo);

JRadioButtonMenuItem rdbtnmntmGrande = new JRadioButtonMenuItem("Grande");
rdbtnmntmGrande.addActionListener(new MiGrandeActionListener());
buttonGroup.add(rdbtnmntmGrande);
mnTamanoFuente.add(rdbtnmntmGrande);

}

private class MiPequenaActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
Font f = new Font(a.getFont().getFontName(), a.getFont().getStyle(), 10);
UIManager.put("Label.font", f);
UIManager.put("Menu.font", f);
UIManager.put("MenuItem.font", f);
SwingUtilities.updateComponentTreeUI(a);

}
}

private class MiGrandeActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
Font f = new Font(a.getFont().getFontName(), a.getFont().getStyle(), 13);
UIManager.put("Label.font", f);
UIManager.put("Menu.font", f);
UIManager.put("MenuItem.font", f);
SwingUtilities.updateComponentTreeUI(a);
}
}

}

有了这个,我可以将字体大小更改一次,例如更改为大字体(大),如果我单击小字体或普通字体,则不会执行任何操作。

谢谢。

最佳答案

I have the following code which works but not on runtime,

Font f = new Font(menuBar.getFont().getFontName(), menuBar.getFont().getStyle(), 12);
UIManager.put("Menu.font", f);

基本上,您需要进行 LAF 更改,因此上面的内容应该是:

Font f = new FontUIResource(menuBar.getFont().getFontName(), menuBar.getFont().getStyle(), 12);
UIManager.put("Menu.font", f);
SwingUtilities.updateComponentTreeUI(frame);

您需要确保字体是 FontUIResource,以便 LAF 可以更改属性。

阅读 Swing 教程中关于 Changing the LAF After Startup 的部分了解更多信息和示例。

关于java - Swing - 在运行时更改菜单栏和菜单项字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41364080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com