2011-01-20 9 views
5

Lớp Nút SWT có phương thức setForeground(Color) nhưng có vẻ như không có hiệu lực (phương thức này thực sự là trên siêu lớp của nút). Các javadoc nói rằng phương pháp này là một gợi ý và có thể được ghi đè bởi nền tảng này. Nền tảng của tôi là Windows.Cách đặt màu nền trước của nút SWT?

  • Điều này có nghĩa là không thể đặt nút nền trước trên Windows?
  • Tính năng này có hoạt động trên các nền tảng khác không?
  • Có cách giải quyết khác không?

Trả lời

5

Trên Windows, setForeground cho Buttons không có tác dụng.

Giải pháp thay thế, thêm PaintListener vào số Button của bạn. Trên phương thức paintControl của Trình nghe này, hãy lấy số GC của sự kiện được tạo và, với nó, viết lại văn bản của số Button bằng màu bạn muốn.

Bạn có thể, trên thực tế, vẽ bất cứ thứ gì trên Button.

+1

Cảm ơn Mario . Phải mất một chút không quan trọng để có được vị trí chính xác nhưng lời khuyên của bạn đã làm công việc. –

+0

@Kevin Stembridge Tôi mới sử dụng SWT GC, bạn có thể giúp tôi bằng cách làm thế nào để có được vị trí chính xác không? Có vẻ khó khăn vì văn bản có thể được căn chỉnh khác nhau. Cảm ơn! – RAY

+0

Định vị có thể được thực hiện thông qua phương thức getSize() của phương thức Button và stringExtent() của GC. Vì vậy, bạn có thể có được kích thước của nút và kích thước của văn bản. – Alex

0

Trên cửa sổ, setForeground cũng không hoạt động đối với Nhóm.

Nếu bạn có thể thuyết phục người dùng sử dụng Chủ đề cổ điển, setForeground sẽ hoạt động một cách kỳ diệu.

2

Nếu bạn cần Nút có kiểu SWT.CHECK bạn có thể thử sử dụng Nút không có văn bản và thêm phần tử Nhãn. Ví dụ:

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

Đây là mã để Thực hiện foreground màu trong Buttons trong SWT với phép Mnemonic chìa khóa để được hiển thị cũng và Enabled bằng cách nhấn Alt + "Mnemonic chính";

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); 

    } 

}); 

Lưu ý: hex2Col là phương pháp của riêng tôi để Chuyển đổi hex Mã màu cho Loại Màu

Lưu ý: Đây ALT + C là kết hợp chính Mnemonic Tôi đã sử dụng