gpt4 book ai didi

Java ChoiceDialog 更改默认按钮顺序

转载 作者:搜寻专家 更新时间:2023-11-01 03:33:27 24 4
gpt4 key购买 nike

与预期相反,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;
}

最佳答案

对话框(和对话框 Pane )上的按钮顺序可以配置如下:

  1. 创建 ChoiceDialog 的子类(例如,CattleGenderDialog)
  2. 创建 DialogPane 的子类(例如,ButtonOrderPane)。
  3. CattleGenderDialog 的 DialogPane 设置为使用 ButtonOrderPane
  4. ButtonOrderPane 按首选顺序返回按钮。

一旦理解了类关系,代码就很简单了。

CattleGenderDialog 类

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( ... );
}
}

ButtonOrderPane 类

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 顺序。)

关于Java ChoiceDialog 更改默认按钮顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40495484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com