Javafx中断或停止按钮事件处理程序

时间:2016-05-11 09:03:45

标签: java button javafx eventhandler

我仍然是Java和JavaFX的初学者,我现在正在努力想办法停止/打破单击按钮时发生的事件。 所以,我正在构建一个程序,将Products(类)添加到TableView中。到目前为止,一切工作正常,产品已成功添加,其参数由我的自定义函数检查,无论用户是否在名称/价格/金额字段中分别输入了字符串/双/整数值。

在我的检查功能中,当输入的值不正确时也会打印一个错误但是我还要这样做,这样当输入的值不正确时,3个字段中的所有输入数据都将被取消/删除。出于这个原因,“添加”按钮的事件处理程序需要停止/中断。我想这样做,因为即使控制台出现错误,错误地输入名称/价格/金额,正确输入的其他值仍将打印在表格中。从而产生数据,例如: 名称:鱼 价钱: 金额:3 ^如果Price值不是正确的双数,而是某个字符串或其他。我有一个删除按钮,可以删除表中的任何数据,因此错误地输入了一个,但我希望“节省时间”或只是让程序“更聪明”。 我也忘了提一下,我的checkString / Double / Int函数使用了try / catch块,所以我已经这样做了,当出现错误时,会打印一条消息并返回一些“默认”值(因为该函数需要返回值)。但是,让我告诉你代码:

产品类别:

if list

现在点击“添加”按钮:

public class Product{
private SimpleStringProperty name;
private SimpleDoubleProperty price;
private SimpleIntegerProperty amount;
//private SimpleIntegerProperty ID=0;

public Product(){
    this.name =new SimpleStringProperty("");
    this.price = new SimpleDoubleProperty(0);
    this.amount = new SimpleIntegerProperty(0);
    //this.ID=0;
}
public Product(String name, double price, int amount /* int id */){
    this.name =new SimpleStringProperty(name);
    this.price = new SimpleDoubleProperty(price);
    this.amount = new SimpleIntegerProperty(amount);
    //this.ID=id;
}

public SimpleStringProperty nameProperty() {
    return name;
}
public void setName(SimpleStringProperty name) {
    this.name = name;
}
public SimpleDoubleProperty priceProperty() {
    return price;
}
public void setPrice(SimpleDoubleProperty price) {
    this.price = price;
}
public SimpleIntegerProperty amountProperty() {
    return amount;
}
public void setAmount(SimpleIntegerProperty amount) {
    this.amount = amount;
}

}

你可以看到我有2个案例“setName”。第一个是带有“if”语句以及我想如何做,或者我是如何想到这样做来检测进程何时需要停止。第二个是以前的样子,你可以看到价格和数量方法是相同的。一旦我弄清楚如何为Name属性执行此操作,我将使用Price和Amount属性执行相同操作。 以下是我写的3个检查函数:

//Add Button function
    addButton.setOnAction(e->{
        Product product = new Product();
        if(checkString(nameInput.getText()).equals(""))
        {
            //break the whole process 
        }
        else
        {
            //value is correct, so it will be saved
            product.setName(checkString(nameInput.getText()));
        }
        //product.setName(checkString(nameInput.getText()));
        product.setPrice(checkDouble(priceInput.getText()));
        product.setAmount(checkInt(amountInput.getText()));
        table.getItems().add(product);
        nameInput.clear();
        priceInput.clear();
        amountInput.clear();
    });

起初,我想制作1个“通用”检查功能,但似乎不可能使用模板类型等,但这是另一个故事。

如果有人能帮助我,我会很高兴,如果你需要主要代码的其他部分,但我认为那些是相关的部分。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,我认为将if-else外的代码移到else中应该可以正常工作

并为每个字段设置检查功能并使用&&运营商链接他们(就像你已经做过)

当字段不正确时,你不做任何事情(或者你可以打印错误消息)

答案 1 :(得分:0)

首先,您的状况检查有误,{​​{1}}会返回checkString()。因此,在SimpleStringProperty条件检查中,您需要执行if

您可以在checkString(value).getValue().equals("") - 块中使用return语句返回并执行任何操作。 喜欢

if