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

时间:2015-09-13 14:07:43

标签: java swing jframe

所以,我有一些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) {}
        }
    }

2 个答案:

答案 0 :(得分:4)

获取屏幕尺寸使用此

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

并设置fint大小根据宽度或高度

使用它
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) {

    }

答案 1 :(得分:4)

如果您指的是显示器尺寸,JRowan的答案是正确的。由于我还不确定这是不是您的意思,因此以下是使用ComponentListener并相对于帧大小更改大小的示例,而不是显示器大小:< / p>

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

}