2016-11-17 73 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); 
} 
相關問題