Я все еще новичок в Java и JavaFX, и в данный момент я изо всех сил пытаюсь найти способ остановить/прервать событие, которое происходит при нажатии кнопки. Итак, я создаю программу, которая добавляет продукты (класс) в TableView. Пока все работает нормально, Товары успешно добавляются и их параметры проверяются моими пользовательскими функциями, вводил ли пользователь строковые/двойные/целочисленные значения соответственно в поля Имя/Цена/Количество.
В моей функции проверки также печатается ошибка, когда введенное значение неверно, НО я также хочу сделать так, чтобы при вводе неправильного значения все введенные данные в 3 поля были аннулированы/стерты. По этой причине каким-то образом обработчик события кнопки «Добавить» должен остановиться/прерваться. Я хочу сделать это, потому что даже если в консоли появится ошибка, что имя/цена/сумма введены неверно, другие значения, которые введены правильно, все равно будут печататься в таблице. Таким образом, в результате получаются данные, например, такие как: Имя: Цена рыбы: Количество: 3 ^ В случае, если значение Цена было не правильным двойным числом, а какой-то строкой или другим. У меня есть кнопка удаления, которая может удалить любые данные из таблицы, таким образом, неправильно введенные, но я хочу «сэкономить время» на этом или просто сделать программу «умнее». Я также забыл упомянуть, что моя функция checkString/Double/Int использует блок try/catch, поэтому я сделал так, что при возникновении ошибки будет напечатано сообщение и будет возвращено некоторое значение «по умолчанию» (поскольку функция требует возвращаемое значение). Но позвольте мне просто показать вам код:
Класс продукта:
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;
}
}
Теперь кнопка «Добавить»:
//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();
});
Вы можете видеть, что у меня есть 2 случая "setName". Первый - с оператором «если» и тем, как я хочу это сделать, или как я думал сделать это для определения того, когда процесс должен быть остановлен. Второй — это то, как это было раньше, и, как вы можете видеть, методы цены и количества одинаковы. Как только я выясню, как это сделать для свойства Name, я сделаю то же самое со свойствами Price и Amount. Вот 3 функции проверки, которые я написал:
public SimpleStringProperty checkString(String messageInput){
SimpleStringProperty stringProperty = new SimpleStringProperty();
try{
Double.parseDouble(messageInput);
System.err.println("You must input a proper name");
stringProperty.setValue("");
}
catch(NumberFormatException e){
stringProperty.setValue(messageInput);
}
return stringProperty;
}
public SimpleIntegerProperty checkInt(String messageInput){
SimpleIntegerProperty integerProperty = new SimpleIntegerProperty();
try{
integerProperty.setValue(Integer.parseInt(messageInput));
}
catch(NumberFormatException e){
System.err.println("You must input a valid amount value");
integerProperty.set(0);
}
return integerProperty;
}
public SimpleDoubleProperty checkDouble(String messageInput){
SimpleDoubleProperty doubleProperty = new SimpleDoubleProperty();
try{
doubleProperty.setValue(Double.parseDouble(messageInput));
}
catch(NumberFormatException e){
System.err.println("You must input a valid price value");
doubleProperty.set(0);
}
return doubleProperty;
}
Сначала я хотел сделать 1 "универсальную" функцию проверки, но вроде бы это невозможно сделать с типами шаблонов и т. д., но это уже другая история.
Я был бы очень рад, если бы кто-нибудь мог мне помочь, если вам нужны другие части основного кода, просто спросите, но я думаю, что это соответствующие части.