我正在尝试制作一个可编辑的Java FX TextArea,它无法使用快捷键Ctrl + Z撤消最后一步。默认情况下,当您创建可编辑的JavaFX TextArea
时,JavaFX为快捷键Ctrl + Z / Ctrl + Y提供默认的撤消/重做功能,同时聚焦TextArea(以及复制,粘贴等)。我想为快捷键Ctrl + Z和Ctrl + Y禁用这些默认操作,以便能够创建我自己的撤消/重做逻辑,而不是JavaFX提供的默认逻辑。另外:我不想完全禁用JFX的撤销重做逻辑,因为我之后使用它,(textarea.undo()
和textarea.redo()
必须仍然可行)我只是想删除KeyPress事件默认情况下是创建的,我该怎么做?
代码:我使用FXML在BorderPane中创建了一个TextArea,并将一个Controller附加到FXML,因此可以通过代码访问TextArea,不使用css文件。
答案 0 :(得分:4)
在文本区域添加一个事件过滤器,如果它与快捷方式匹配,则使用该事件:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.stage.Stage;
public class TextAreaNoUndo extends Application {
@Override
public void start(Stage primaryStage) {
TextArea area = new TextArea();
area.addEventFilter(KeyEvent.ANY, e -> {
if (e.getCode() == KeyCode.Z && e.isShortcutDown()) {
e.consume();
}
});
primaryStage.setScene(new Scene(area));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
答案 1 :(得分:2)
常见的是他们正在使用while($row = mysqli_fetch_array($result)){
echo "<tr>
<td>".$row["id"]."</td>
<td>".$row["name"]."</td>
<td>".$row["ort"]."</td>
<td>".$row["strasse"]."</td>
<td>".$row["projektleiter"]."</td>
<td><a href='edit.php?id=".$row['id']."' alt='edit'>Bearbeiten</a></td>
</tr>";
}?>
类的comsume()方法。
1)使用KeyCodeCombination:
Event
2)使用isShortcutDown()的KeyEvent方法:
TextArea ta = new TextArea();
final KeyCombination keyCombCtrZ = new KeyCodeCombination(KeyCode.Z, KeyCombination.SHORTCUT_DOWN;
final KeyCombination keyCombCtrY = new KeyCodeCombination(KeyCode.Y, KeyCombination.SHORTCUT_DOWN);
ta.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
if (keyCombCtrZ.match(event) || keyCombCtrY.match(event) ) {
event.consume();
}
}
});