java - Java Mac OSX native 外观和感觉是否尊重 UIManager 字体更改?

标签 java macos swing size fonts

我有一个 java 小程序,唯一可以正常工作的外观和感觉是 native mac 小程序。我想让字体更大一点,并尝试使用标准 UIManager 方法

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

这不会产生任何变化。当然,它不会抛出异常。

有谁知道原生 Mac 的外观和感觉是否会忽略这些?

我知道有一些特定的方法可以使 mac 上的控件具有不同的大小,但这些似乎只会使它们更小。您不能使控件大于常规控件。

最佳答案

updateComponentTreeUI(...) 方法(在由trashgod 提供的“启动后更改LAF”链接中引用)仅适用于 FontUIResource,不适用于 Font。仅当您需要在启动后多次更改字体时,这才有意义。

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

关于java - Java Mac OSX native 外观和感觉是否尊重 UIManager 字体更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2892721/

相关文章:

java - 如何判断JTextPane中所选文本的大小是否不同?

java - 如何在没有 SAML 的情况下在多个 Spring Security Web 应用程序上使用 SSO?

java - 如何格式化数字以仅在非 0 时包含 "+/-"?

objective-c - Storyboard不包含标识符为 'MainWindow' 的 Controller

amazon-web-services - 如何从命令行访问 Amazon S3 上的文件?

java - 如何隐藏jscrollbar创建的面板周围的边框?

java - 在 XML 中声明 Swing View

java - Java 中的并行化线程执行

java - 为 Android 创建动态游戏引擎的自然方法

Swift Package Manager 可执行应用程序,设置部署目标