2016-03-26 19 views
3

Bir swing GUI projesinde çalışıyorum ve JTextPane kalın harf içindeki metni dönüştüren bir JButton var. Bunu yapmak için Action kullanıyorum. İşte Bir eylem ayarlandığında JButton metni değişir

İşte Action butonuna metni dahil olmadan JButton

JButton bold = new JButton("B"); 
bold.setFont(new Font("Arial", Font.BOLD, 15)); 
bold.setBounds(393, 15, 100, 100); 
bold.setBackground(Color.WHITE); 
bold.setAction(boldAction); 
frame.add(bold); 

için kod ben ne cesur "B" mi Action

public static Action boldAction = new StyledEditorKit.BoldAction(); 

için kod istemek. Ortaya çıkan sorun, eylemi eklediğimde, düğmenin üzerindeki yazıyı "font-bold" olarak değiştirmesidir.

Bu neden oluyor ve bunu nasıl düzeltebilirim?

+0

'bold.setBounds (393, 15, 100, 100); '1), Java GUI farklı yerel farklı PLAFs kullanılarak farklı vb OS', ekran boyutu, ekran çözünürlüğü üzerinde çalışmak gerekir. Bu nedenle, piksel mükemmel düzenine elverişli değildir. Bunun yerine düzen yöneticileri veya [bunların kombinasyonları] (http://stackoverflow.com/a/5630271/418556), [beyaz alan] için düzen dolguları ve kenarlıkları ile birlikte kullanın (http://stackoverflow.com/a/17874718/ 418.556). 2) Daha iyi yardım için, daha önce bir [MCVE] veya [Kısa, Kendini İçeren, Doğru Örnek] (http://www.sscce.org/) gönderin. –

+0

Eylem'in, kendi metinlerini ayarlamak için düğmeler tarafından kullanılan eylemin NAME'sini de içeren, işin kendisinde bulunan iş birimleri vardır. – MadProgrammer

cevap

1

zaman Bir Eylem kullanırsanız, Eylemin özellikleri düğüme varsayılan olarak ayarlanır.

Eğer "font-kalın" istemiyorsanız

o zaman Eylem ayarı SONRA metni değiştirmek gerekir:
JButton bold = new JButton(boldAction); 
bold.setText("B"); 

Ayrıca SetBounds() yöntemi kullanmayın. Swing, düzen yöneticileri ile kullanılmak üzere tasarlanmıştır.

//bold.setBounds(393, 15, 100, 100); 
+0

Teşekkürler, bunu denemeyi düşünmüştüm. Ben sadece setBounds() 'yi kullanıyorum çünkü bir şeyleri düzenlemek çok daha kolay, ama ne dediğini anlıyorum –

1

StyledEditorKit tarafından sağlanan eylemler, JTextComponent alt sınıfları tarafından sağlanan görünüme ait Document modelini here gösterildiği gibi değiştirir. JButton tarafından kullanılan yazı tipini değiştirmek için "Button.font" anahtarını here gösterildiği gibi değiştirmek için UIManager kullanın.

aşağıda gösterildiği gibi, düğmenin beklenen yazı almak ve düğme en Action bir türetilmiş yazı tipini belirtmek UIManager kullanın dinamik düğme görünümünü değiştirmek istediğiniz Çünkü:

image

final JButton button = new JButton(); 
Action action = new AbstractAction("Bold") { 
    Font font = (Font) UIManager.get("Button.font"); 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     button.setFont(font.deriveFont(Font.BOLD)); 
    } 
}; 
button.setAction(action);