【发布时间】:2012-11-23 09:25:54
【问题描述】:
我正在尝试自动增加/减少 JButton 文本的字体大小(如果 JButton 增加/拉伸它的文本也会增加,如果 JButton 减小它的文本也会减少)。 JButtons 的默认字体是 Sans-Serif 大小 20,它永远不会小于 20(它可以是 21、30、40 或大于或等于 20 的任何值,但永远不会小于 20)。我有一个名为 MenuJPanel 的 JPanel,它使用 GridLayout 添加 5 个 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);
}
}
【问题讨论】:
-
您的问题是您没有发布SSCCE,什么btnOperatorLogout,在主类中,对不起懒惰也打败了我,顺便说一下这个简单的问题在这个论坛上解决了很多次,我可以看到DeriveFont & JLabel 的一些代码
-
谢谢,我刚刚修复了示例代码
-
你是否能够计算内部区域(如果选中,请参阅有关 JButton 的行)意味着从 JButton 获取插图和为边框获取负 1 像素(如果选中,请参阅有关 JButton 的行),然后结果可用于SwingUtilities#computeStringWidht :-)
标签: java swing jpanel jbutton grid-layout