JavaFx 自动完成侦听器单选按钮



我有一个文本字段,我想在其中动态更改自动完成列表。 所有这些代码都在我的控制器的初始化方法中。

这是我第一次运行程序时的原始分配:(nomi 是文本字段,listaNomi 是一个可观察列表

listaNomi = OperatoreDAO.cercaNomiOp(attuale);
TextFields.bindAutoCompletion(nomi,listaNomi);

这有效,但现在我想在选择两个不同的单选按钮之一时更改列表内容(OperatoreDAO.cercaNomiOp 方法将单选按钮作为参数(

contrattoGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
@Override
public void changed(ObservableValue<? extends Toggle> ov, Toggle t, Toggle t1) {
RadioButton selez = (RadioButton)t1.getToggleGroup().getSelectedToggle();
try {
listaNomi = OperatoreDAO.cercaNomiOp(selez);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});

我不得不把ObservableList<String> listaNomi = FXCollections.observableArrayList();放在初始化方法之外,因为说局部变量必须是最终的。 现在它没有说错误,但是如果我更改单选按钮,列表将保持不变。

使用AutoCompletionBinding<String>.此应用演示如何使用AutoCompletionBinding<String>List<String>根据所选RadioButton更改绑定。

import java.util.Arrays;
import java.util.List;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import org.controlsfx.control.textfield.AutoCompletionBinding;
import org.controlsfx.control.textfield.TextFields;
/**
*
* @author blj0011
*/
public class JavaFXApplication208 extends Application
{
AutoCompletionBinding<String> abcBinding;
AutoCompletionBinding<String> defBinding;
@Override
public void start(Stage primaryStage)
{
List<String> list1 = Arrays.asList("one", "two", "three");
List<String> list2 = Arrays.asList("four", "five", "six");
TextField textfield = new TextField();
VBox root = new VBox();
RadioButton radioButton1 = new RadioButton("Left");
RadioButton radioButton2 = new RadioButton("Right");
ToggleGroup radioGroup = new ToggleGroup();
radioButton1.setToggleGroup(radioGroup);
radioButton2.setToggleGroup(radioGroup);
radioGroup.selectedToggleProperty().addListener((obs, oldValue, newValue) -> {
RadioButton tempRadioButton = (RadioButton) newValue;
if (tempRadioButton == radioButton1) {
if (defBinding != null) {
defBinding.dispose();
}
abcBinding = TextFields.bindAutoCompletion(textfield, list1);
}
else if (tempRadioButton == radioButton2) {
if (abcBinding != null) {
abcBinding.dispose();
}
defBinding = TextFields.bindAutoCompletion(textfield, list2);
}
});
HBox hbox = new HBox(radioButton1, radioButton2);
root.getChildren().addAll(hbox, textfield);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
}

最新更新