我在JavaFX中创建了一个应用程序,其中有很多选择框(大约100个)。单击它们中的每一个会更改一个布尔变量的状态(选中-真,未选中-假)。我对每个选择框都有ActionEvent,但我想制作支持所有它们的操作事件。
其中一个ActionEvent看起来像:
public void onActionClick(ActionEvent actionEvent) {
if(firstCheckbox.isSelected()){
firstBooleanValue=true;
} else {
firstBooleanValue=false;
}
}
第二个看起来很相似:
public void onActionClick(ActionEvent actionEvent) {
if(secondCheckbox.isSelected()){
secondBooleanValue=true;
} else {
secondBooleanValue=false;
}
}
我从我的朋友那里听说我应该使用EventHandler创建类并传递参数(复选框和布尔变量),但我不知道怎么做。有什么解决方案吗?
我从朋友那里听说我应该用EventHandler创建一个类,并传递参数(复选框和布尔变量)
除非您想为布尔
变量使用容器类(例如布尔属性
),否则实际上不可能以允许您编写变量的方式传递变量。你当然可以通过消费者
(理论上,可以通过反射访问字段来写入值,但我强烈建议不要这样做。)
在事件处理程序中,您可以使用< code>source
属性来获取触发更改的对象(< code >复选框)。这个事实将允许您创建一个< code >映射
private boolean a;
private boolean b;
private boolean c;
private Map<CheckBox, Consumer<Boolean>> eventMap = new HashMap<>();
private void comboAction(ActionEvent event) {
CheckBox cb = (CheckBox) event.getSource();
eventMap.get(cb).accept(cb.isSelected());
}
@Override
public void start(Stage primaryStage) {
CheckBox cb1 = new CheckBox("a");
CheckBox cb2 = new CheckBox("b");
CheckBox cb3 = new CheckBox("c");
// tell event handler what to do with the booleans
eventMap.put(cb1, v -> a = v);
eventMap.put(cb2, v -> b = v);
eventMap.put(cb3, v -> c = v);
// register event handlers
EventHandler<ActionEvent> onAction = this::comboAction;
for (CheckBox cb : eventMap.keySet()) {
cb.setOnAction(onAction);
}
Button button = new Button("print");
button.setOnAction(evt -> {
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println("-------");
});
Scene scene = new Scene(new VBox(cb1, cb2, cb3, button));
primaryStage.setScene(scene);
primaryStage.show();
}
但是,单个类中有 100 个布尔字段这一事实表明存在设计问题。请考虑将数据存储在不同的数据结构中,如列表
、地图
或类似的数据结构。您还可以将CheckBox
es存储在这样的数据结构中,这将使onAction
事件处理程序的使用变得不必要;您可以简单地检索负责该属性的复选框
,并在您需要值时使用 isSelected
...
问题内容: 我正在一个Java应用程序中工作,我需要同时执行这两个查询(如Java中的Strings),并在出现错误的地方回滚事务。 更新 我创建了一个字符串,其中两个查询用注释建议分隔开 更新 我已经尝试了JDBC原子事务作为Java中的代码。我强迫第二个sql失败,但是即使我指定.setAutoCommit(false); dblink通过第一个查询影响了另一个数据库。我在没有dblink事务
问题内容: 问题 如何制作一个Ajax按钮(向上和向下箭头),以便数字可以增加或减少 如何将用户的操作保存到变量NumberOfVotesOfQuestionID 我不确定是否应该对变量使用数据库。但是,我知道还有一种更简单的方法可以节省投票数。 您如何解决这些问题? [编辑] 服务器端编程语言是Python。 问题答案: 这是使用jQuery / Django的肮脏/未经尝试的理论实现。 我们将
问题内容: 我如何才能向中添加一堆类,然后再从中检索一个类(派生自,但不是),并使用它来生成实际检索到的类的新对象(即,因为那不是抽象的) 所有需要添加的类都源自同一个 抽象 基类() 我真的想不出另一种方法来实现自己的目标,所以希望这是可能的…? 问题答案: 为了防止使用反射,您可能正在寻找抽象工厂模式。这是一个简单的示例,说明如何使用Java 8实现它:
我正在使用Felix Framework将Jetty 9.2作为osgi包运行,在命令提示符下,Apache Felix的启动方式如下 我的jetty home是这样的 启动felix框架后,在命令提示符中,我可以看到以活动状态加载的绑定列表。 但仍然得到相同的错误。有谁好心的建议我如何配置我的JSP在这种情况下..?
使用嵌套for loops语句绘制“*”s的空心框。这些框的行数和列数相同,该数字应由用户输入(有效范围:5到21)。我想不出办法把盒子弄空心。这是我的代码,它是一个完整的正方形,但我需要它是空心的或只是边界。 输出应该是这样的:有多少行/列(5-21)?25超出范围。重新输入: 7
问题内容: 问题 如何制作一个Ajax按钮(向上和向下箭头),以便数字可以增加或减少 如何将用户的操作保存到变量NumberOfVotesOfQuestionID 我不确定是否应该对变量使用数据库。但是,我知道还有一种更简单的方法可以节省投票数。 您如何解决这些问题? [编辑] 服务器端编程语言是Python。 问题答案: 这是使用jQuery / Django的肮脏/未经尝试的理论实现。 我们将