JTextPaneを一行に制限してスタイル可能なJTextFieldとして使用する
Total: 5967
, Today: 1
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
JTextPane
の行数を一行のみに制限して、文字色などのスタイル付けが可能なJTextField
として使用します。
Screenshot
Advertisement
サンプルコード
JTextPane textPane = new JTextPane() {
@Override public void scrollRectToVisible(Rectangle rect) {
rect.grow(getInsets().right, 0);
super.scrollRectToVisible(rect);
}
};
textPane.setEditorKit(new NoWrapEditorKit());
AbstractDocument doc = new SimpleSyntaxDocument();
textPane.setDocument(doc);
try {
doc.insertString(0, text, null);
} catch (Exception ex) {
ex.printStackTrace();
}
String KEY = "Do-Nothing";
InputMap im = textPane.getInputMap(JComponent.WHEN_FOCUSED);
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), KEY);
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0), KEY);
textPane.getActionMap().put(KEY, new AbstractAction() {
@Override public void actionPerformed(ActionEvent e) {
// Do nothing
}
});
// @see https://ateraimemo.com/Swing/FocusTraversalKeys.html
Set<AWTKeyStroke> forwardKeys = new HashSet<AWTKeyStroke>(
textPane.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_DOWN_MASK));
textPane.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys);
JScrollPane scrollPane = new JScrollPane(
textPane, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER) {
@Override public Dimension getMinimumSize() {
return super.getPreferredSize();
}
};
View in GitHub: Java, Kotlin解説
JScrollPane
に追加JScrollBar
を常に非表示にしたJScrollPane
にJTextPane
を追加
JTextPane
の折り返しを無効化- JEditorPaneで長い行を折り返さないの
ParagraphView
を使用して折り返しを無効化
- JEditorPaneで長い行を折り返さないの
- 文字列の最後に移動した
Caret
が非表示にならないよう修正JTextPane#scrollRectToVisible(Rectangle)
をオーバーライドして余白までスクロールするように設定- No Wrap Text Pane ≪ Java Tips Weblogのように
CaretListener
を使用する方法もある
- Enterキーの無効化
JTextPane
からInputMap
とActionMap
を取得してKeyEvent.VK_ENTER
をなにもしないAction
に置き換えるDocument#insertString(...)
をオーバーライドしてコピー・ペーストなどで張り込まれた文字列から改行を空白に置換
- Tabキーでフォーカス移動
- FocusTraversalKeysに矢印キーを追加してフォーカス移動
JTextPane
からInputMap
を取得してKeyEvent.VK_TAB
をなにもしないAction
に置き換え、JTextPane#setFocusTraversalKeys(...)
でTabキーでフォーカス移動するように設定
- 文字スタイルの変更
- JTextPaneでキーワードのSyntaxHighlight
SyntaxDocument.java
を使って入力されたred
、green
、blue
の文字色を変更