我尝试过类似的实现JavaFX EventFilter
:
@FXML
public void leftButton() {
leftButton.addEventFilter(MouseEvent.MOUSE_PRESSED,
new EventHandler < MouseEvent > () {
@Override
public void handle(MouseEvent event) {
try {
System.out.println("Left Button pressed, String: " + leftString);
byte[] command = {
(byte) startTx, address, byteOne, panLeft, speedNormal, 0x00, endTx, 0x2B
};
//byte[] bytes = DatatypeConverter.parseHexBinary(upString);
TwoWaySerialComm.SerialWriter sw = new TwoWaySerialComm.SerialWriter(
twoWaySerCom.serialPort.getOutputStream());
sw.out.write(command);
} catch (IOException e) {
e.printStackTrace();
}
}
});
leftButton.addEventFilter(MouseEvent.MOUSE_RELEASED,
new EventHandler < MouseEvent > () {
public void handle(MouseEvent event) {
try {
System.out.println("Left Button released, String: " + stopString);
byte[] command = {
(byte) startTx, address, byteOne, 0x00, 0x00, 0x00, (byte) endTx, 0x0F
};
TwoWaySerialComm.SerialWriter sw = new TwoWaySerialComm.SerialWriter(
twoWaySerCom.serialPort.getOutputStream());
sw.out.write(command);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
当我点击Button
时,我通过串口写一个字符串,当我释放Button
时发送一个不同的字符串。
我有两个问题
1.当我第一次打开应用程序时,我必须在发生任何事情之前按Button
两次
2.对于每次额外点击,动作再次发生。 EG首先单击“HELLO”再点击“HELLO HELLO”
我怀疑我的问题是我的第一次点击会注册EventFilter
,然后每个后续事件都会创建一个新的EventFilter
如何防止这种情况发生?
答案 0 :(得分:0)
- 当我第一次打开应用程序时,我必须在发生任何事情之前按两次按钮
醇>
您可以在方法leftButton()
中添加事件过滤器,该方法在您按钮的操作中调用。因此,第一次单击按钮时,没有附加事件过滤器,因此没有任何反应。
要解决此问题,您可以将代码移至initialize()
或使用单独的方法放置这些代码,然后使用FXML调用它们。
开启
public void onPress() {
try {
System.out.println("Left Button pressed, String: " + leftString);
byte[] command = { (byte) startTx, address, byteOne, panLeft, speedNormal, 0x00, endTx, 0x2B };
TwoWaySerialComm.SerialWriter sw = new TwoWaySerialComm.SerialWriter(
twoWaySerCom.serialPort.getOutputStream());
sw.out.write(command);
} catch (IOException e) {
e.printStackTrace();
}
}
发布时
public void onRelease() {
try {
System.out.println("Left Button released, String: " + stopString);
byte[] command = {(byte) startTx, address, byteOne, 0x00, 0x00, 0x00, (byte) endTx, 0x0F};
TwoWaySerialComm.SerialWriter sw = new TwoWaySerialComm.SerialWriter(twoWaySerCom.serialPort.getOutputStream());
sw.out.write(command);
} catch (IOException e) {
e.printStackTrace();
}
}
<强> FXML 强>
<Button id="leftButton" fx:id="leftButton" onMousePressed="#onPress" onMouseReleased="#onRelease"/>
- 对于每次额外点击,操作再次发生。 EG首先点击&#34; HELLO&#34;第二次点击&#34; HELLO HELLO&#34;
醇>
虽然,我不确定,但你似乎在写相同的流,因此附加你的数据。