与预期相反,ChoiceDialog中按钮的默认顺序是左侧的“取消”,右侧是“确定”。
在这个方法中,我创建了一个对话框,列出了牛的性别(牛,小母牛,阉牛等)。所有工作都使用默认对话框,但按钮顺序与我构建的每个其他自定义构建对话框相反。
我相信“Java外观和感觉设计指南”需要左边“确定”和右边“取消”的对话框。
无论如何,正如下面的代码所示,我试图设置自己的按钮。 改变它们的添加顺序没有区别。
然而,我可以获得我寻求的订单,如果ButtonData.OTHER,但是我没有得到所需的结果(选择性别)。
我真正想做的就是更改按钮顺序,并获得所需的结果。
public static final String getChoice_Sex()
{
String sex = "";
List<String> list_Sexs = LM_Constant.getList_Sexs();
ChoiceDialog<String> dialog = new ChoiceDialog<>(list_Sexs.get(0), list_Sexs);
dialog.setTitle("Sex");
dialog.setHeaderText("Please choose one.");
dialog.setContentText("From this list:");
//ButtonType button_OK = new ButtonType("OK", ButtonData.OK_DONE);
//ButtonType button_OK = new ButtonType("OK", ButtonData.OTHER);
//ButtonType button_Cancel = new ButtonType("Cancel", ButtonData.CANCEL_CLOSE);
//dialog.getDialogPane().getButtonTypes().clear();
//dialog.getDialogPane().getButtonTypes().add(button_Cancel);
//dialog.getDialogPane().getButtonTypes().add(button_OK);
//dialog.getDialogPane().getButtonTypes().add(button_Cancel);
Optional<String> result = dialog.showAndWait();
if (result.isPresent())
sex = result.get();
return sex;
}
答案 0 :(得分:1)
对话框(和对话框窗格)上的按钮排序可按如下方式配置:
ChoiceDialog
的子类(例如CattleGenderDialog
)DialogPane
的子类(例如ButtonOrderPane
)。CattleGenderDialog
的DialogPane设置为使用ButtonOrderPane
。ButtonOrderPane
个返回按钮。一旦理解了类关系,代码就很简单了。
public class CattleGenderDialog extends ChoiceDialog {
public CattleGenderDialog( final Window owner ) {
initOwner( owner );
// This is the key line to override button order.
setDialogPane( new ButtonOrderPane() );
// This line will return the button order pane.
final DialogPane dialogPane = getDialogPane();
dialogPane.setContent( pane );
dialogPane.getButtonTypes().addAll( ... );
}
}
import static javafx.scene.control.ButtonBar.BUTTON_ORDER_WINDOWS;
public class ButtonOrderPane extends DialogPane {
// This is where the revised button order is defined.
@Override
protected Node createButtonBar() {
final ButtonBar node = (ButtonBar)super.createButtonBar();
node.setButtonOrder( getButtonOrder() );
return node;
}
private String getButtonOrder() {
return getSetting( "dialog.alert.button.order.windows", BUTTON_ORDER_WINDOWS );
}
private String getSetting( final String key, final String defaultValue ) {
return getSettings().getSetting( key, defaultValue );
}
// How you load the settings is up to you; I prefer decoupled code.
private Settings getSettings() {
return Services.load( Settings.class );
}
}
这些设置包括以下property definitions:
dialog.alert.button.order.mac=L_HE+U+FBIX_NCYOA_R
dialog.alert.button.order.linux=L_HE+UNYACBXIO_R
dialog.alert.button.order.windows=L_E+U+FBXI_YNOCAH_R
这允许整个应用程序中的一致按钮,独立于平台,同时为用户提供选择其首选按钮顺序的灵活性。 (也许Mac用户更喜欢Linux订购。)