2014-02-17 2 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) убеждается, что группа виджет будет иметь тот же фон, как и его предшественник (он называется предшественником я не знаком с точные члены) - оболочка.

Но как я могу наложить свойства оболочки на объект группы вообще? например: тот же TextStyle, что и оболочка, или тот же шрифт, что и оболочка. (и да, я знаю, что я не задал никаких свойств для оболочки в приведенном выше коде, кроме фона)

Возможно ли это?

ответ

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 я бы сказал, что вы не можете заставить всех дочерних элементов композита иметь те же свойства, что и родительский, вы можете наследовать только фон.

В этом случае для того, чтобы всегда иметь те же свойства, вы можете создать свою собственную структуру, которая будет производить собственные стилизованную виджеты, которые будут создавать и стиль управления пользовательского интерфейса в соответствии с требованиями, например:

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 - это краткий обзор того, что вы можете с ним сделать.

Смежные вопросы