[英]How to automatically increase or decease size of JButton text based on the size of JButton?
我试图自动增加/减小JButton文本的字体大小(如果JButton增加/延伸,其文本也会增加,如果JButton减少,其文本也会减少)。 JButton的默认字体将为Sans-Serif大小20,并且永远不会减小到20以下(它可以是21、30、40或大于或等于20的任何值,但不得小于20)。 我有一个名为MenuJPanel的JPanel,它使用GridLayout添加5个JButton,这些JButton的大小将随着JPanel的增加/减少而增加/减小。 我选择了GridLayout,因为它似乎是用于此目的的最佳布局,对吗? 我还向MenuJPanel添加了componentResized。 在下面,您可以看到部分起作用的代码。
public class MenuJPanel extends JPanel {
private JButton resizeBtn1;
private JButton resizeBtn2;
private JButton resizeBtn3;
private JButton resizeBtn4;
private JButton resizeBtn5;
public MenuJPanel() {
initComponents();
this.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
Font btnFont = resizeBtn1.getFont();
String btnText = resizeBtn1.getText();
int stringWidth = resizeBtn1.getFontMetrics(btnFont).stringWidth(btnText);
int componentWidth = resizeBtn1.getWidth();
// Find out how much the font can grow in width.
double widthRatio = (double) componentWidth / (double) stringWidth;
int newFontSize = (int) (btnFont.getSize() * widthRatio);
int componentHeight = resizeBtn1.getHeight();
// Pick a new font size so it will not be larger than the height of label.
int fontSizeToUse = Math.min(newFontSize, componentHeight);
// Set the label's font size to the newly determined size.
resizeBtn1.setFont(new Font(btnFont.getName(), Font.BOLD, fontSizeToUse));
}
});
}
private void initComponents() {
resizeBtn1 = new javax.swing.JButton();
resizeBtn2 = new javax.swing.JButton();
resizeBtn3 = new javax.swing.JButton();
resizeBtn4 = new javax.swing.JButton();
resizeBtn5 = new javax.swing.JButton();
setLayout(new java.awt.GridLayout(5, 0));
resizeBtn1.setText("Text to resize 1");
add(resizeBtn1);
resizeBtn2.setText("Text to resize 2");
add(resizeBtn2);
resizeBtn3.setText("Text to resize 3");
add(resizeBtn3);
resizeBtn4.setText("Text to resize 4");
add(resizeBtn4);
resizeBtn5.setText("Text to resize 5");
add(resizeBtn5);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.