首先在JavaFX ToggleGroup

时间:2017-05-31 14:19:14

标签: javafx radio-button

  

描述

我有两个RadioButtons,他们都在名为ToggleGroup的{​​{1}}上,我使用fileSearchGroup制作,下面是图片:

enter image description here

  

问题

因此,如上所示添加了两个SceneBuilder 8。如果我更改了它们,那么一个名为RadioButtons的名字会关闭而另一个名为File Absolute Path...的名字会出现,哪一个会成为第一名,哪一名将成为名为File Name...的第二名ToggleGroup

为什么我想知道?

因为在应用程序中我有这个代码(下面是一些伪代码):

fileSearchGroup
  

最后

是否有上述解决方案,或者我必须将//Get the index of the selected toggle if(group.getSelectedToggleIndex() == 0) //Search using absolute path else //Search using file name 添加到我不想做的ID,导致我保存数据库设置时添加的代码复杂性

  • 为什么我不想使用RadioButtons

我正在使用ID数据库保存设置,因此KeyValue例如为Key,其值为SearchFilesUsing0,基于1内选定的RadioButton索引,如果我添加ToggleGroup则会使工作变得困难,如果我想在将来更改ID,我将不得不再次更改代码到处都是。

1 个答案:

答案 0 :(得分:1)

您需要在文件中的内容(基本上是字符串或其他某种数据类型的字符串表示)与单选按钮之间进行一些映射。没有理由相信 "intent": "ShootIntent" "slots": [ { "name": "Column", "type": "LIST_OF_COLUMNS" }, { "name": "Row", "type": "AMAZON.NUMBER" } ], 比其他任何事情更重要。

您可以使用一些字符串常量并将它们存储在控制器的地图中:

LIST_OF_COLUMNS

现在您可以使用

写入文件
a Adams Alpha b Beta Boston Bravo c Charlie Chi Chicago d Delta Denver e Easy Echo Epsilon f Foxtrot Frank g Gamma George Golf h Henry Hotel i Ida India Iota j John Juliet k Kappa Kilo King l Lambda Lima Lincoln...

你可以用

回读
int

作为一个轻微的变体你可以创建一个枚举而不是使用字符串。这里的优点是您可以在枚举中实际编写搜索策略。

private final Map<RadioButton, String> radioButtonKeys = new HashMap<>();

private static final String ABSOLUTE_PATH_SEARCH = "ABSOLUTE_PATH";
private static final String FILE_NAME_SEARCH = "FILE_NAME";

@FXML
private RadioButton absolutePathRadioButton ;
@FXML
private RadioButton fileNameSearchRadioButton ;
@FXML
private ToggleGroup group ;

public void initialize() {
    radioButtonKeys.put(absolutePathRadioButton, ABSOLUTE_PATH_SEARCH);
    radioButtonKeys.put(fileNameSearchRadioButton, FILE_NAME_SEARCH);
}

(抽象方法可以有你需要的任何签名。)

然后像以前一样创建地图,但是使用枚举值:

String searchType = radioButtonKeys.get(group.getSelectedToggle());
// write searchType as the value for Search_Files_Using

,文件读/写是

String searchType = /* value from file for Search_Files_Using */
for (RadioButton radioButton : radioButtonKeys.keySet()) {
    radioButton.setSelected(radioButtonKeys.get(radioButton).equals(searchType)) ;
}

public enum SearchType {
    ABSOLUTE_PATH {
        public void search() {
            // search implementation here...
        }
    },
    FILE_NAME {
        public void search() {
            // search implementation here...
        }
    };

    public abstract void search() ;
}

实际执行搜索时,枚举的优势在于:

private final Map<RadioButton, SearchType> radioButtonKeys = new HashMap<>();

public void initialize() {
    radioButtonKeys.put(absolutePathRadioButton, SearchType.ABSOLUTE_PATH);
    radioButtonKeys.put(fileNameSearchRadioButton, SearchType.FILE_NAME);
}

只是一些想法。切换组中切换按钮的顺序是切换组的实现,可能取决于非常随意的内容,例如在FXML文件中定义它们的顺序。 imho。

依赖于那个并不强大