2011-01-20 18 views
5

SWT Button sınıfı, setForeground(Color) yöntemine sahiptir, ancak hiçbir etkisinin olmadığı görülmektedir (yöntem aslında, butonun üst sınıfındadır). Javadoc, bu yöntemin bir ipucu olduğunu ve platform tarafından geçersiz kılınabileceğini söylüyor. Platformum Windows.SWT düğmesi ön plan rengi nasıl ayarlanır?

  • Bu, Windows'ta düğmenin ön plan rengini ayarlamanın mümkün olmadığı anlamına mı geliyor?
  • Diğer platformlarda çalışıyor mu?
  • Bir geçici çözüm var mı?

cevap

5

Windows'ta, Buttons için setForeground'un hiçbir etkisi yoktur.

Bir geçici çözüm olarak, Button ürününe PaintListener ekleyin. Bu Listener'in paintControl yönteminde, oluşturulan etkinliğin GC olmasını sağlayın ve bununla birlikte, Button'un metnini istediğiniz rengi kullanarak yeniden yazın.

Aslında, Button üzerinde bir şey çizebilirsiniz.

+1

Teşekkür Mario . Konumlandırmayı düzeltmek biraz uğraştı ama tavsiyen iş yaptı. –

+0

@Kevin Stembridge SWT GC’ye yeni katılıyorum, konumlandırmayı nasıl doğru yapacağım konusunda bana yardımcı olabilir misiniz? Bu zor gibi görünüyor çünkü metin farklı hizalanabilir. Teşekkürler! – RAY

+0

Konumlandırma, Düğmenin getSize() yöntemi ve GC'nin stringExtent() yöntemi kullanılarak yapılabilir. Böylece metnin boyutunu ve boyutunu elde edebilirsiniz. – Alex

0

Windows'ta setForeground, Grup için de çalışmaz.

Kullanıcılarınızı Klasik Temayı kullanmaya ikna ederseniz, setForeground mucizevi bir şekilde çalışır.

2

Eğer SWT.CHECK stili olan bir Düğmeye ihtiyacınız varsa, Düğme metin kullanmadan kullanabilir ve Etiket elemanı ekleyebilirsiniz. Örnek:

chkAutorun = new Button(fCompositeLogin, SWT.CHECK); 
Label lblAutorun = new Label(fCompositeLogin, SWT.NONE); 
lblAutorun.setForeground(white); 
lblAutorun.setText("Autorun"); 
0

Bu Mnemonic anahtar da gösterilir ve Alt + "Mnemonic Key" basmak: Etkin sağlayan ile SWT Düğmeler içinde ön plan rengi Uygulama kodudur;

Button radioButton=new Button(parent,SWT.RADIO); 
StringBuffer sb = new StringBuffer("I am a Coloured radio button"); 
String name=null; 
String S = "I am a Coloured radio button"; 
String substr="C"; 
int i=S.indexOf(substr); 
sb.insert(i,"&"); 
S=sb.toString(); 
name=sb.substring(i, i+2); 
name=sb.toString(); 
String whiteSpace=" "; 
final String TName=S; 

for(int l=0;l<1000;l++) 
    whiteSpace=whiteSpace.concat("   "); 

radioButton.setText(name+whiteSpace); 

radioButton.addPaintListener(new PaintListener(){ 
String name=TName; 
    @Override 
    public void paintControl(PaintEvent e) { 
     // TODO Auto-generated method stub 
     e.gc.setForeground(hex2Col("ffffcc")); 
     int x=21; 
     int y=21; 
     e.gc.drawText(name, x,y,SWT.DRAW_MNEMONIC | SWT.TRANSPARENT); 

    } 

}); 

Not: hex2Col Renk Türü altıgen Renk Kodunu dönüştürme için kendi yöntemdir

Not: Burada ALT + C i kullanılmış olan Mnemonic Tuş Birleşimi olan