Swing/OneLineTextPane のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/OneLineTextPane へ行く。
- 1 (2013-05-06 (月) 00:34:13)
- 2 (2013-05-06 (月) 15:23:34)
- 3 (2013-05-06 (月) 18:01:49)
- 4 (2013-05-06 (月) 21:05:07)
- 5 (2013-07-26 (金) 01:55:46)
- 6 (2013-07-27 (土) 02:00:09)
- 7 (2013-08-18 (日) 04:41:59)
- 8 (2013-08-20 (火) 14:25:17)
- 9 (2013-11-01 (金) 17:53:52)
- 10 (2013-11-02 (土) 03:32:53)
- 11 (2014-09-17 (水) 13:17:20)
- 12 (2014-10-22 (水) 00:49:41)
- 13 (2014-11-08 (土) 01:41:12)
- 14 (2014-11-26 (水) 18:30:10)
- 15 (2015-01-14 (水) 15:33:16)
- 16 (2016-06-20 (月) 14:32:13)
- 17 (2016-06-20 (月) 16:17:59)
- 18 (2017-09-19 (火) 06:33:09)
- 19 (2017-10-27 (金) 16:26:13)
- 20 (2017-11-02 (木) 15:32:16)
- 21 (2019-03-22 (金) 19:00:38)
- 22 (2019-08-15 (木) 14:42:41)
- 23 (2021-04-11 (日) 00:33:28)
- 24 (2025-01-03 (金) 08:57:02)
- 25 (2025-01-03 (金) 09:01:23)
- 26 (2025-01-03 (金) 09:02:38)
- 27 (2025-01-03 (金) 09:03:21)
- 28 (2025-01-03 (金) 09:04:02)
- 29 (2025-06-19 (木) 12:41:37)
- 30 (2025-06-19 (木) 12:43:47)
TITLE:JTextPaneを一行に制限してスタイル可能なJTextFieldとして使用する
Posted by aterai at 2013-05-06
JTextPaneを一行に制限してスタイル可能なJTextFieldとして使用する
`JTextPane
の行数を一行のみに制限して、文字色などのスタイル付けが可能な
JTextField
`として使用します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
JTextPane textPane = new JTextPane() {
// @see http://www.java2s.com/Code/Java/Swing-JFC/NonWrappingWrapTextPane.htm
@Override public boolean getScrollableTracksViewportWidth() {
Component parent = getParent();
ComponentUI ui = getUI();
return parent != null ? (ui.getPreferredSize(this).width<=parent.getSize().width) : true;
}
@Override public void scrollRectToVisible(Rectangle rect) {
int r = getBorder().getBorderInsets(this).right;
rect.grow(r, 0);
super.scrollRectToVisible(rect);
}
};
AbstractDocument doc = new SimpleSyntaxDocument();
textPane.setDocument(doc);
try {
doc.insertString(0, text, null);
} catch(Exception ex) {
ex.printStackTrace();
}
InputMap im = textPane.getInputMap(JComponent.WHEN_FOCUSED);
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), new AbstractAction() {
@Override public void actionPerformed(ActionEvent e) {
// Do nothing
}
});
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0), new AbstractAction() {
@Override public void actionPerformed(ActionEvent e) {
// Do nothing
}
});
// @see http://terai.xrea.jp/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, KeyEvent.SHIFT_MASK));
textPane.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys);
JScrollPane scrollPane = new JScrollPane(
textPane, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER) {
@Override public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
d.width = 100;
return d;
}
};
View in GitHub: Java, Kotlin解説
- `
JScrollPane
`に追加- `
JScrollBar
を常に非表示にした、
JScrollPane
に
JTextPane
`を追加
- `
- JTextPaneの折り返しを無効化
- Non Wrapping(Wrap) TextPane : TextField?≪?Swing JFC?≪?Javaを参考に、`
JTextPane#getScrollableTracksViewportWidth()
`をオーバーライドして、折り返しを無効化 - メモ: JEditorPaneで長い行を折り返さない
- Non Wrapping(Wrap) TextPane : TextField?≪?Swing JFC?≪?Javaを参考に、`
- 文字列の最後にある`
Caret
`が表示されないのを修正- `
JTextPane#scrollRectToVisible(Rectangle)
`をオーバーライドして、余白までスクロールするように設定 - メモ: No Wrap Text Pane ≪ Java Tips Weblogのように、`
CaretListener
`を使用する方法もある
- `
- 改行キーの無効化
- `
JTextPane
から
InputMap
を取得して、
KeyEvent.VK_ENTER
をなにもしない
Action
`で置き換える - `
Document#insertString(...)
`をオーバーライドして、コピー・ペーストなどで張り込まれた文字列から、改行を空白に置換
- `
- タブキーでフォーカス移動
- FocusTraversalKeysに矢印キーを追加してフォーカス移動
- `
JTextPane
から
InputMap
を取得して、
KeyEvent.VK_TAB
をなにもしない
Action
で置き換え、
JTextPane#setFocusTraversalKeys(...)
`で、タブキーでフォーカス移動するように設定
- 文字スタイルの変更
- SyntaxDocument.javaを使って、入力された`
red
,
green
,
blue
`の文字色を変更
- SyntaxDocument.javaを使って、入力された`