2014-02-17 49 views
1

我是新手,因此請和我一起裸照。在Java SWT中繼承小部件屬性

小部件是否可以繼承其前任的屬性? 例如,說我有下面的代碼段:

Display display=new Display(); 
Shell shell=new Shell(display, SWT.DIALOG_TRIM); 
Image menu_background=new Image(display, "menu.jpg"); 
shell.setBackgroundImage(menu_background); 
shell.setBounds(menu_background.getBounds()); 
shell.setBackgroundMode(SWT.INHERIT_DEFAULT); 


Group game_modes=new Group(shell,SWT.SHADOW_ETCHED_OUT); 
game_modes.setText("Game Mode"); 
game_modes.setLocation(50, 170); 
game_modes.setForeground(display.getSystemColor(SWT.COLOR_WHITE)); 
... 
... 
... 

呼籲shell.setBackgroundMode(SWT.INHERIT_DEFAULT)可確保該組部件將具有相同的背景,它的前身(叫前輩,我不熟悉的確切的術語) - 外殼。

但是,我怎樣才能強制一般的組對象的shell屬性?例如:與shell相同的TextStyle,或與shell相同的Font。 (是的,我知道我沒有在上面的代碼中爲外殼設置任何屬性,除了背景)

這是可能的嗎?

回答

3

使用Eclipse 4.x,您可以使用CSS對應用程序進行樣式設置,從那裏對控件應用相同的屬性(Vogella's tutorial)。它似乎也應該可以使用3.x(http://www.slideshare.net/toedter_k/css-styling-for-eclipse-rcp-3x-and-4x)。

默認情況下使用Eclipse 3.x,我會說你不能強制複合材料的所有孩子具有相同的屬性,作爲父母,你只能繼承背景。

在這種情況下,爲了始終具有相同的屬性,您可能希望創建自己的框架,這將產生自定義風格的小部件,這將根據需要創建和風格的UI控件,例如:

public class WidgetFactory { 

    public static final Color BACKGROUND_DEFAULT = new Color(Display.getCurrent(), 224, 231, 255); 

public static final String FONT_DEFAULT = "default"; 

    private static FontRegistry fontRegistry = null; 

    static { 
    fontRegistry = new FontRegistry(Display.getCurrent()); 

      putFont(FONT_DEFAULT, "Verdana", fontSizes.get(FONT_DEFAULT), SWT.NONE); 
    } 

    public static Composite createComposite(Composite parent, int numCols, boolean equalWidth, int gridDataStyle) { 
      Composite composite = new Composite(parent, SWT.NONE); 
      composite.setFont(fontRegistry.get(FONT_DEFAULT)); 
      composite.setBackground(BACKGROUND_DEFAULT); 

      GridData gridData = new GridData(gridDataStyle); 
      composite.setLayoutData(gridData); 

      GridLayout layout = new GridLayout(numCols, equalWidth); 
      layout.marginWidth = 0; 
      layout.marginHeight = 0; 
      layout.horizontalSpacing = 0; 
      layout.verticalSpacing = 0; 
      composite.setLayout(layout); 

      return composite; 
     } 

     public static Label createLabel(Composite parent, String text, String toolTipText) { 
      Label theLabel = new Label(parent, SWT.NONE); 
      theLabel.setText(trim(text)); 
      theLabel.setToolTipText(trim(toolTipText)); 
      theLabel.setFont(fontRegistry.get(FONT_DEFAULT)); 
      parent.setBackgroundMode(SWT.INHERIT_DEFAULT); 
      return theLabel; 
     } 
    } 

還有一些其他造型選項,可能與presentationFactoryextension point,你認爲它超出了你的問題範圍。 Here簡要介紹了你可以用它做什麼。