根据屏幕大小更改字体大小

Changing font size according to screen size

所以,我有一些 JButton,我需要根据屏幕的大小更改字体大小。 JButton 的大小会自动更改,因为我使用的是 GridLayout 布局。我在线程中尝试了以下一些代码,运行:

@Override
    public void run() {
        int i = 0;
        int l = 0;
        while(true) {
            for(int x=0; x<buttons.length; x++) {
                while(true) {
                    int size = 300;
                    size--;
                    Font font = buttons[x].getFont().deriveFont((float) size);
                    if(font.canDisplayUpTo(buttons[x].getText()) == 1) {
                        buttons[x].setFont(font);
                        o(font.getSize());
                        break;
                    }
                }
                buttons[x].setText(String.valueOf( l ));

            }
            l++;
            try {
                Thread.sleep(100);
            } catch (InterruptedException ex) {}
        }
    }

获取屏幕尺寸使用这个

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();

并根据宽度或高度设置字体大小

button.setFont(new Font("Arial", Font.PLAIN, (int)width/50));

编辑

或者如果您尝试根据组件更改大小的时间来更改字体大小

implement ComponentListener

然后

frame.addComponentListener(this);

ComponentListener 的方法

public void componentHidden(ComponentEvent e) {

    }

    public void componentMoved(ComponentEvent e) {

    }

    public void componentResized(ComponentEvent e) {
            int width = frame.getWidth();
            button.setFont(new Font("Arial", Font.PLAIN, width / 25));
            frame.getContentPane().revalidate();

    }

    public void componentShown(ComponentEvent e) {

    }

如果您指的是显示器尺寸,JRowan 的回答是正确的。由于我仍然不确定这是否是您的意思,这里是一个使用 ComponentListener 并更改相对于 帧大小 的大小的示例,而不是监视器大小:

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Example {

    public Example() {

        JFrame frame = new JFrame();
        JButton button = new JButton("Button");

        frame.addComponentListener(new ComponentListener() {

            @Override
            public void componentHidden(ComponentEvent arg0) {
            }

            @Override
            public void componentMoved(ComponentEvent arg0) {
            }

            @Override
            public void componentResized(ComponentEvent arg0) {
                int width = frame.getWidth();
                int height = frame.getHeight();
                button.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, (width + height) / 25));
                frame.getContentPane().revalidate();
            }

            @Override
            public void componentShown(ComponentEvent e) {

            }
        });

        frame.getContentPane().setLayout(new GridLayout(1, 1));
        frame.getContentPane().add(button);

        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setVisible(true);

    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Example();
            }
        });
    }

}