2013-03-19 18 views
5

yazı boyutu LookAndFeel, ben için Nimbus ve benim JOptionPane ayarlamak için birkaç kod satırları kullanılan varsayılan çok küçük olduğu için, Evet ve Farklı boyutlarda düğmeyi gösterir. Evet hala çok küçük, No ise, ben atamak istediğiniz boyutta olacak şekilde ayarlanmış. Herkes nedenini ya da nasıl tamir edeceğini biliyor mu?Java JOptionPane Evet ve Hayır Düğme ayarladıktan sonra yazı tipi boyutu farklılık Salıncak Nimbus LookAndFeel

public static void setUIFont(Font a){ 
    FontUIResource ax=new FontUIResource(a); 
    javax.swing.UIManager.put("OptionPane.messageFont", ax); 
    javax.swing.UIManager.put("OptionPane.buttonFont", ax); 
    javax.swing.UIManager.put("OptionPane.Font", ax); 
    javax.swing.UIManager.put("InternalFrame.titleFont", ax); 
    javax.swing.UIManager.put("TextField.font", ax); 
    javax.swing.UIManager.put("ComboBox.font", ax); 
} 

...

UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 

class UseNimBus extends SwingInvoker{ 
    public void run(){ 
     JDialog.setDefaultLookAndFeelDecorated(true); 
     setUIFont(new FontUIResource(new Font(ufont, Font.PLAIN, 20))); 
    } 
} 
(new UseNimBus()).execute();// just invokeLater() 

aşağıdaki satırı seçeneği bölmesini gösterir ama Evet ve farklı boyutu ile hiçbir sahiptir. Normal mi yoksa sadece benim sorunum mu?

inputValuex=JOptionPane.showConfirmDialog(
    myWin, "Are you exiting?", "You clicked X", JOptionPane.YES_NO_OPTION); 

Güncelleme Hâlâ çalışmıyor. Ben Evet düğmesinin konumunu değiştirmek için kodunu

javax.swing.UIManager.put("OptionPane.isYesLast", true);

kullanmayı denedi ama herhangi bir etkisi yoktu. Ben sadece boolean gibi değerleri nasıl ayarlayacağımı görmek istedim.

Ayrıca, ben bile optionpane veya düğmesine içeren UIManager.getDefaults() tüm anahtarları listelenir ve onların yazı tipi boyutları tüm küçük yazı tipi olarak hala 20'ye Evet düğmesine ayarlanır.

+1

Bu harika! – MadProgrammer

+0

bir hata gibi geliyor, öneriniz için teşekkürler :-) – kleopatra

cevap

4

JButton için yazı tipi aslında Button.font özelliğinden geliyor.

Bunu özellik listenize eklersem çalışır.

javax.swing.UIManager.put("Button.font", ax); 

Neden iki farklı boyut elde edersiniz, komik iken, şu anda benden öte.

+0

. Tüm mevcut özelliklere bakmamı hatırlattı. Sadece garip. –

3

SeçenekPane'de oluşturulan ilk düğme için özel yazı tipinin alınmamasının nedeni, bunun rootPane'in defaultButton yapmasıdır. Bu şekilde, özelliklerin aranması için kullanılan özel bir [Varsayılan] - düğmenin yazı tipi tipi UIResource tipindedir.

ne olur onu "OptionPane için UIManager bulduğu yazı için tüm oluşturduğu düğmeler yazı tipini ayarlar OptionPaneUI

  • olduğunu.buttonFont"
  • SynthButtonUI devlet [Varsayılan] için düğmenin fontu yok sayar bilmem (ancak adlandırılmış/çocuk bileşenleri için arama bozuldu unutmamak sanmıyorum nedense bir UIResource

çünkü bir UIResource bunu ayarlarken Nimbus) 'de, ayarlarının hiçbiri aşağıda

UIManager.put("\"OptionPane.button\"[Default].font", ax); 
UIManager.put("OptionPane:\"OptionPane.button\"[Default].font", ax); 

Ayrıca herhangi bir etkisi, ikinci düğmenin özel yazı tipi üzerine gelince kaybolur/duruldu. bir hackaround etmektir belirlemiyorsunuz UIResource olarak, bu

01'dir
public static void setUIFont(Font a){ 
    // force usage of the button's font as set by optionPaneUI 
    // by _not_ making it a uiResource 
    UIManager.put("OptionPane.buttonFont", a); 
    // use uiResource for others 
    FontUIResource ax=new FontUIResource(a); 
    UIManager.put("OptionPane.messageFont", ax); 
    ... 
} 

Normal olarak, en iyi fikir değildir. Ancak düğmeler, her bir çağrı için JOptionPane.create çağrısında yaratılır, çünkü bireysel örnek üzerinde kalıcı bir etki olmaz.

+0

Gerekli birkaç kez gördüm (başlangıçtaki ilk fikrim Sınırlar ya da farklı fontlar ile JMenuItems ile ilgili olduğunu gerçekten unutmuşum) [UIManager.getLookAndFeel() .uninitialize();] (http://stackoverflow.com/q/ 9958004/714968) – mKorbel

İlgili konular