java - 我可以在不更改 JPanel 和 JFrame 大小的情况下更改字体类型吗?

标签 java swing user-interface fonts

每次我在程序中更改 JLabels、JTextAreas、JRadioButtons 等的字体类型时,它都会更改所有这些内容所在的面板的大小,并且我必须 pack() 框架以使它们全部适合再次改变主框架的大小,这显然是我不想要的。有没有办法改变字体类型而不改变其他任何东西的大小?

最佳答案

这并不容易,JLabel、JTextArea 等的默认大小被委托(delegate)给“外观和感觉”,这使用字体的字体规范、大小和文本来确定大小。

字体越大,按钮越大。

我建议您接受这一点,并使用一个布局管理器来很好地处理...

即不要假设精确的布局,而是使用基于网格且具有足够可用空间的内容,以便字体大小可以变化。

如果您仍然迫切希望这样做,您可以使用以下内容覆盖控件的首选大小,尽管这预先假设您正在使用尊重这些提示的布局管理器。

public static void main(String [] args) {
    JFrame frame = new JFrame();
    JTextField small = new JTextField("small");
    JTextField big = new JTextField("big");
    big.setFont(big.getFont().deriveFont(Font.BOLD, 40));
    big.setPreferredSize(new Dimension(123, 20));
    big.setMaximumSize(new Dimension(123, 20));
    frame.setLayout(new FlowLayout());
    frame.add(small);
    frame.add(big);

    frame.setVisible(true);
}

关于java - 我可以在不更改 JPanel 和 JFrame 大小的情况下更改字体类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40665445/

相关文章:

Java多重继承,摆脱重复代码

java - 桌面程序与服务器通信

java - 如何获取文件的所有不同大小的系统图标

安卓径向/饼状菜单

java - 创建和使用 GUI 时

java - 如何从java接口(interface)/类似的using block 返回结果

java - ThreadPoolTask​​Executor 没有执行提交给它的所有线程

java - 在 JScrollPane 中获取正确的鼠标位置

java - JTextArea对齐

java - 如何更新显示对象详细信息的面板