2016-11-17 66 views
0

每次我改变JLabels,JTextAreas,JRadioButtons等在我的程序中的字体类型时,它都会改变所有这些东西所在的面板的大小,我必须打包()框架以使它们再次合适这改变了我显然不想要的主框架的尺寸。有没有办法改变字体类型而不改变其他的大小?我可以在不更改JPanels和JFrame大小的情况下更改字体类型吗?

+0

更改组件的属性时,组件会重新生效,因为这可能会导致更改组件的首选大小。这又会调用布局管理器来确保组件仍然正确显示。所以这是一个必要的步骤,不应该被避免。您需要重新设计屏幕以允许更改大小,也许可以使用滚动窗格? – camickr

回答

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