根据屏幕大小更改字体大小
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();
}
});
}
}
所以,我有一些 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();
}
});
}
}