gpt4 book ai didi

java - 如何在调整大小时更改 JLabel 字体大小以填充 JPanel 可用空间?

转载 作者:搜寻专家 更新时间:2023-10-31 19:41:02 24 4
gpt4 key购买 nike

这里有一个类似的问题: How to change the size of the font of a JLabel to take the maximum size

但它不能反向工作。

因此,如果您将 JPanel 变大,字体会变大,但如果您将它变小,JLabel 的大小和字体将保持原样

Check this Image

如何让Jlabel字体在缩放时根据JPanel大小增长?

最佳答案

通过使用 FontMetricsTextLayout你可以得到这个输出(请阅读代码中的注释)

SwingUtilities也可以正确地做到这一点

我建议在两个方向上另外添加几个像素

添加ComponentListener到容器并在 componentResized 事件上再次重新计算 FontMetrics

enter image description here

import java.awt.*;
import java.awt.font.TextLayout;
import java.awt.geom.Rectangle2D;
import javax.swing.*;

public class ShowFontMetrics extends JFrame {

private static final long serialVersionUID = 1L;
private JLabel lTime;

public ShowFontMetrics() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane = new JPanel();
pane.setLayout(new FlowLayout());
lTime = new JLabel("88:88");
lTime.setFont(new Font("Helvetica", Font.PLAIN, 88));
FontMetrics fm = lTime.getFontMetrics(lTime.getFont());
TextLayout layout = new TextLayout(lTime.getText(), lTime.getFont(), fm.getFontRenderContext());
Rectangle2D bounds = layout.getBounds();
Dimension d = lTime.getPreferredSize();
d.height = (int) (bounds.getHeight() + 100);// add huge amount of pixels just for for fun
d.width = (int) (bounds.getWidth() + 150);// add huge amount of pixels just for for fun
lTime.setPreferredSize(d);
lTime.setVerticalAlignment(SwingConstants.CENTER);
lTime.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
pane.add(lTime);
setContentPane(pane);
}

public static void main(String[] arguments) {
ShowFontMetrics frame = new ShowFontMetrics();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}

关于java - 如何在调整大小时更改 JLabel 字体大小以填充 JPanel 可用空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9311720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com