我仍然是Java和JavaFX的初学者,目前我正在努力寻找一种方法来阻止/中断单击按钮时发生的事件。因此,我正在构建一个程序,将产品(类)添加到TableView中。到目前为止,一切正常,产品添加成功,其参数由我的自定义函数检查,用户是否在名称/价格/金额字段中分别输入了字符串/双精度/整数值。
在我的检查功能中,当输入的值不正确时,也会打印一个错误,但我也希望这样做,以便在输入不正确的值时,3个字段中输入的所有数据都会被清空/擦除。因此,“Add”按钮的事件处理程序需要停止/中断。我想这样做,因为即使控制台中出现错误,名称/价格/金额输入错误,其他正确输入的值仍将打印在表中。例如,如果价格值不是正确的双倍数字,而是某个字符串或其他字符串,则会生成诸如:Name:Fish Price:Amount: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();
});
您可以看到我有两个案例“setName”。第一个是with“if”语句以及我想如何执行它,或者我想如何执行它以检测进程何时需要停止。第二个是它过去的样子,正如您所看到的,Price和金额方法是相同的。一旦我弄清楚如何为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个“通用”检查功能,但似乎无法使用模板类型等,但那是另一回事。
如果有人能帮助我,我会非常高兴,如果你需要主代码的其他部分,尽管问吧,但我认为这些都是相关的部分。
首先你的条件检查是错误的,check String()
返回一个SimpleStringProperty
。所以在你的if
条件检查中,你需要做check String(value). getValue(). equals(")
。
您可以在if块中使用return语句来执行任何操作。喜欢
if(checkString(nameInput.getText()).getValue().equals("")) {
return;
}
上周我刚开始使用JavaFx,但在尝试在窗格中设置圆圈以响应按钮事件处理程序时遇到了问题。我有左、右、上、下名称的按钮设置,按下时应该会在窗格内移动圆圈。我的问题是我根本无法让圆圈响应我的事件处理程序。我看到了另一个包含按键移动圆圈的教程,我正在尝试类似的东西,但用按钮代替。任何帮助我走向正确方向的帮助都将非常感谢。
我的一段代码 下一条语句的错误为
我正在使用javafx创建一个扫雷克隆,如果有人玩过原始游戏,他们可能会记得当你按下一个磁贴并四处移动时,其他磁贴的行为就好像它们也在被按下一样...如果你放手-即使你最初按下的是一个完全不同的节点,你鼠标当前所在的节点也会被点击。我很难重新创建这个,我需要一些帮助。 我正在使用全局事件处理程序类,我不太确定这是好是坏......但是,让我的克隆的事件单独处理感觉很好。我尝试过在事件发生的节点上使
问题内容: 我在JavaFX中有一个舞台,可以通过多种方式关闭该舞台,方法是单击红色(X)或通过一个调用 无论舞台如何关闭,我都希望在舞台关闭之前(或之后)执行操作。 如果我使用以下代码: 然后当我单击(X)时调用处理程序,但当我调用 不同之处在于,他希望在整个应用程序关闭时调用处理程序,因此可以覆盖的方法。但是,我并没有关闭整个应用程序,只是一个阶段。并且没有重写的方法。 谢谢你的帮助。 问题答
我们有一个使用Disruptor框架的系统,它有五个注册阶段来实现EvenetHandler。 阶段按顺序工作,因此请求只能在第一阶段完成时移动到第二阶段,该移动由Disruptor内部维护。 我们对第三阶段有问题,这是瓶颈,需要大量时间,因为它进行不同的HTTP调用并将响应存储在请求对象中。 因此,我们希望在第三阶段花了一段时间之后,将请求(无论有什么响应)提前到第四和第五阶段。 如何超时任何特
我试图在JavaFX中重现一个JavaScript游戏的一些行为。该程序有几个数字文本字段,可以在游戏运行时进行编辑。它在运行时也接受字母键盘命令。 macOS、Java17、JavaFX17。