私のアプリケーションでは、2つのタブを使用しています。最初にHtmlEditorを配置し、2番目にTextAreaを配置しました。 [HTML]タブがデフォルトであり、ユーザーがHTML入力を作成しているときに、TextAreaに切り替えて、HTMLソースコードを直接表示/変更できます。 HtmlEditorからhtmlTextを取得してTextAreaでテキストとして設定するリスナーを追加したので、ユーザーはHTMLモードとソースモードを簡単に切り替えることができます。これが私のリスナーです:
@FXML
private Tab htmlTab;
@FXML
private Tab sourceTab;
@FXML
private HTMLEditor htmlEditor;
@FXML
private TextArea textEditor;
htmlTab.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if (htmlTab.isSelected()) {
htmlEditor.setHtmlText(textEditor.getText());
}
}
});
sourceTab.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if (sourceTab.isSelected()) {
textEditor.setText(htmlEditor.getHtmlText());
}
}
});
正常に動作しますが、HtmlEditorはテキストを自動的に行に分割します。 TextAreaに切り替えると、すべて1行で表示されます。
TextAreaの長さ属性を使用して文字数をカウントし、「n」文字ごとに改行文字を追加するヘルパーメソッドを作成することを考えましたが、より良い解決策はありますか?
テキストを折り返すだけの場合は、
textEditor.setWrapText(true);