JavaFX:如何设置动作到ComboBox?

时间:2017-05-25 21:24:41

标签: java user-interface javafx combobox

ComboBox dropDown = new ComboBox();


dropDown.getItems().addAll("Mexican Peso", "Canadian Dollar", "Euro", "British Pound");

dropDown.setOnAction(e -> dropDownMenu());
private void dropDownMenu(ComboBox dropDown){


    }
private void calculatePound() {

    double n1 = Double.parseDouble(input.getText());
    output.setText(String.format("%.2f", n1*.80));
}

我正在尝试为组合框中的每个元素调用一个方法。举个例子:如果有人选择“英镑”,它会调用我编写的calculatePound方法并计算英镑转换。我没有做太多的GUI,所以我试图用它做更多的练习。

2 个答案:

答案 0 :(得分:1)

执行此操作的惯用方法是创建一个封装所需数据和功能的类,并使用它的实例填充组合框。

E.g。创建一个Currency类:

public class Currency {

    private final double exchangeRate ;
    private final String name ;

    public Currency(String name, double exchangeRate) {
        this.name = name ;
        this.exchangeRate = exchangeRate ;
    }

    public double convert(double value) {
        return value * exchangeRate ;
    }

    public String getName() {
        return name ;
    }

    @Override
    public String toString() {
        return getName();
    }
}

然后做

ComboBox<Currency> dropDown = new ComboBox<>();
dropDown.getItems().addAll(
    new Currency("Mexican Peso", 18.49),
    new Currency("Canadian Dollar", 1.34),
    new Currency("Euro", 0.89),
    new Currency("British Pound", 0.77)
);

现在你需要做的就是

dropDown.setOnAction(e -> {
    double value = Double.parseDouble(input.getText());
    double convertedValue = dropDown.getValue().convert(value);
    output.setText(String.format("%.2f", convertedValue));
});

您可以向Currency类添加其他特定于货币的信息,例如货币符号和格式规则等。

请注意,使用此方法添加更多货币要容易得多(new Currency(name, rate)调用中所需的只是另一个dropDown.getItems().addAll(...)),与使用字符串填充组合框的方法相比(其中)你需要另一种方法和你的开关或if语句中的另一个案例)。这种方法还有许多其他好处。

答案 1 :(得分:0)

您首先需要某种按钮,以便用户在选择列表中的项目后单击。此按钮应调用以下方法:

  1. 确定当前选择组合框列表中的哪个项目
  2. 调用另一种方法对当前所选项目执行适当的操作
  3. 例如:

            ComboBox dropDown = new ComboBox();
            dropDown.getItems().addAll("Mexican Peso", "Canadian Dollar", "Euro", "British Pound");
    
            Button button = new Button();
            button.setOnAction(event -> {
                  //Call a method to determine which item in the list the user has selected
                  doAction(dropDown.getValue().toString()); //Send the selected item to the method
            });
    
    
      private void doAction(String listItem) {
            switch (listItem) {
                  case "Mexican Peso": //Action for this item
                        break;
                  case "Canadian Dollar": //Action for this item
                        break;
                  case "Euro": //Action for this item
                        break;
                  case "British Pound": calculatePound();
                        break;
                  default: //Default action
                        break;
            }
      }