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

时间:2016-11-17 21:34:34

标签: java swing user-interface fonts

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

1 个答案:

答案 0 :(得分:1)

不容易,JLabel,JTextArea等的默认大小被委托给“外观”,这使用字体,大小和文本的字体度量来确定大小。

更大的字体,更大的按钮。

我建议你接受这个,并使用一个处理得很好的布局管理器......

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

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

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);
}
相关问题