【问题标题】:Passing static Method to a button factory (Java)将静态方法传递给按钮工厂(Java)
【发布时间】:2018-10-05 07:30:12
【问题描述】:

我正在为 Eclipse 编写一个小插件(使用 SWT),它创建一个带有几个按钮的视图。为了不产生冗余代码,我想创建某种工厂方法来为我创建按钮。调用类似于:

Button button0 = createButton(new Button(parent, SWT.PUSH), "Test DB zurücksetzen", btnHight, btnWidth, new FormAttachment(0, 2), new FormAttachment(0,2));

到目前为止,我的工厂是这样的:

private Button createButton(Button buttonToCreate, String buttonText, int height, int width, FormAttachment left, FormAttachment top) {

    buttonToCreate.setText(buttonText);
    FormData formData = new FormData();
    formData.height = height;
    formData.width = width;
    formData.left = left;
    formData.top = top;
    buttonToCreate.setLayoutData(formData);

    buttonToCreate.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            Actions.editPropertys(); 
        }
    });

    return buttonToCreate;

}

我的问题是:如何将我要执行的 Actions 类的 Method 作为参数传递给工厂?

【问题讨论】:

  • 不需要将静态方法传递给工厂方法,因为您只需使用类名即可调用静态方法。
  • @amitpandey 我认为OP希望传递静态方法以便能够根据对createButton()的调用调用不同的方法

标签: java button plugins swt


【解决方案1】:

您可以将其作为方法的Runnable 参数来传达。

例如:

private Button createButton(Button buttonToCreate, String buttonText, int height, int width, FormAttachment left, FormAttachment top, Runnable actionOnSelection) {

  // ...
    buttonToCreate.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            actionOnSelection.run(); // change here
        }
    });
}

并调用它:

Button button0 = createButton(new Button(parent, SWT.PUSH), "Test DB zurücksetzen", btnHight, btnWidth, new FormAttachment(0, 2), new FormAttachment(0,2), 
                Actions::editPropertys); // other change here

【讨论】:

  • 像魅力一样工作!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多