仅对 JavaFx 中 TextArea 的第一行应用 space/padding
apply space/padding for only first line of TextArea in JavaFx
我想在标题标签结束后开始编辑 TextArea,如下图所示。以及陈列衬里。显示文字是label,不是textarea的文字。
提前致谢...
您可能有专门的 TextArea 实现,它会阻止编辑填充的文本。
示例:
public class FirstLinePaddedTextAread extends javafx.scene.control.TextArea {
private int offset;
public FirstLinePaddedTextAread(String padded) {
this.offset = padded.length();
this.setText(padded);
this.positionCaret(offset);
this.setOnKeyPressed(event -> consumeIfCaretIsOnReadOnlyArea(event));
this.setOnKeyTyped(event -> consumeIfCaretIsOnReadOnlyArea(event));
this.setOnKeyReleased(event -> consumeIfCaretIsOnReadOnlyArea(event));
}
private void consumeIfCaretIsOnReadOnlyArea(javafx.scene.input.KeyEvent event) {
if (getCaretPosition() < offset) {
if (!event.getCode().isNavigationKey())
event.consume();
} else if (getCaretPosition() == offset) {
if (event.getCode() == javafx.scene.input.KeyCode.DELETE
|| event.getCode() == javafx.scene.input.KeyCode.BACK_SPACE) {
event.consume();
}
}
}
}
我想在标题标签结束后开始编辑 TextArea,如下图所示。以及陈列衬里。显示文字是label,不是textarea的文字。
提前致谢...
您可能有专门的 TextArea 实现,它会阻止编辑填充的文本。
示例:
public class FirstLinePaddedTextAread extends javafx.scene.control.TextArea {
private int offset;
public FirstLinePaddedTextAread(String padded) {
this.offset = padded.length();
this.setText(padded);
this.positionCaret(offset);
this.setOnKeyPressed(event -> consumeIfCaretIsOnReadOnlyArea(event));
this.setOnKeyTyped(event -> consumeIfCaretIsOnReadOnlyArea(event));
this.setOnKeyReleased(event -> consumeIfCaretIsOnReadOnlyArea(event));
}
private void consumeIfCaretIsOnReadOnlyArea(javafx.scene.input.KeyEvent event) {
if (getCaretPosition() < offset) {
if (!event.getCode().isNavigationKey())
event.consume();
} else if (getCaretPosition() == offset) {
if (event.getCode() == javafx.scene.input.KeyCode.DELETE
|| event.getCode() == javafx.scene.input.KeyCode.BACK_SPACE) {
event.consume();
}
}
}
}