【问题标题】:WizardPane : Disable 'Previous' button on a screenWizardPane:禁用屏幕上的“上一个”按钮
【发布时间】:2015-08-26 07:59:51
【问题描述】:

如何禁用 ControlsFX WizardPane 屏幕上的“上一个”按钮?我正在尝试使用这种方法prev.setDisable(true),但我所拥有的是NullPointerException

public class MainApp extends Application {
    Wizard wizard = new Wizard();

    WizardPane1 page1 = new WizardPane1();

    WizardPane page2 = new WizardPane();

    WizardPane page3 = new WizardPane() {
        @Override
        public void onEnteringPage(Wizard wizard) {
            Node prev = lookupButton(ButtonType.PREVIOUS);
            prev.setDisable(true);
        }
    };

    page1.setContent(page1.getInit());

    wizard.setFlow(new LinearFlow(page1, page2, page3));
    wizard.showAndWait();

}

public class WizardPane1 extends WizardPane {
      public void initWizard() {}
}

【问题讨论】:

  • 什么是向导类?
  • 您好,您可以从这个页面查看controlsfx.bitbucket.org/org/controlsfx/dialog/Wizard.html
  • s.o.println(getButtonTypes()); 打印什么在 onEnteringPage() 方法中?
  • 输出:[ButtonType [text=Vorheriger, buttonData=BACK_PREVIOUS], ButtonType [text=Nächster, buttonData=NEXT_FORWARD], ButtonType [text=Fertigstellen, buttonData=FINISH], ButtonType [text=Abbrechen, buttonData=CANCEL_CLOSE]]
  • 我的文字是德语(text=....)

标签: javafx wizard controlsfx


【解决方案1】:

这将禁用按钮。

@Override 
public void onEnteringPage( Wizard wizard ) { 
     for ( ButtonType type : getButtonTypes() ) {
         if ( type.getButtonData().equals(ButtonBar.ButtonData.BACK_PREVIOUS) ){
             System.out.println("Found Back button");
             previous_button = (Button) lookupButton( type );
             break;
         }
     }

     Platform.runLater(new Runnable() {
         @Override 
         public void run() {        
          previous_button.setDisable(true); 
         }
    });       
}

【讨论】:

  • 是的,它有效。为了算法清晰,我更喜欢使用 while 而不是 for with break。但这是一个装饰细节。
【解决方案2】:

我没有尝试,但根据Wizard 的源代码,它添加了自己的“上一个”按钮,要查找它,您可能需要先查找完全相同的ButtonType 的引用使用ButtonData:

WizardPane page3 = new WizardPane()
{
    @Override
    public void onEnteringPage( Wizard wizard )
    {
        for ( ButtonType type : getButtonTypes() )
        {
            if ( type.getButtonData().equals(ButtonBar.ButtonData.BACK_PREVIOUS) )
            {
                Node prev = lookupButton( type );
                prev.setDisable( true );
                break;
            }
        }
    }
};

【讨论】:

  • 我没有 NullPointerException 但按钮没有被禁用。
【解决方案3】:

这是解决方案,它有效:))

@Override
public void onEnteringPage(Wizard wizard) {

    ObservableList<ButtonType> list = getButtonTypes();

    for (ButtonType type : list) {
        if (type.getButtonData().equals(ButtonBar.ButtonData.BACK_PREVIOUS)) {
            Node prev = lookupButton(type);
            prev.visibleProperty().setValue(Boolean.FALSE);

        }
    }
} 

【讨论】:

  • 您正在隐藏按钮,而不是按照您的问题中的要求禁用它。除此之外,它与其他答案没有区别。
  • 你是对的。我有一个隐藏但没有禁用的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
相关资源
最近更新 更多