ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何根据JButton的大小自动增加或减少JButton文本的大小?

2019-05-20 15:50:34  阅读:247  来源: 互联网

标签:java swing jpanel jbutton grid-layout


我试图自动增加/减少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);
    }
}

解决方法:

通常,JButton的ButtonUI委托根据设计者选择的字体和平台的美学来计算按钮的首选大小.由于您的方法失败了,您可以决定文本如何使用按钮缩放并适应按钮装饰.

如果没有创建自己的ButtonUI,您可以简单地缩放文本.在这个example中,TextLayout用于以任意大的大小呈现BufferedImage中的文本,可以根据需要缩小.在此example中,单个数字的字形在BufferedImage中呈现并缩放以适合按钮的当前大小.如果需要处理Icon的相对位置,请参阅SwingUtilities.layoutCompoundLabel(),检查here.

标签:java,swing,jpanel,jbutton,grid-layout
来源: https://codeday.me/bug/20190520/1143989.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有