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