Swing/ExpandingTextArea のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ExpandingTextArea へ行く。
- 1 (2017-12-26 (火) 17:16:23)
- 2 (2018-02-15 (木) 14:23:42)
- 3 (2019-12-11 (水) 21:15:24)
- 4 (2021-06-11 (金) 15:00:34)
- category: swing folder: ExpandingTextArea title: JTextAreaにフォーカスが当たったときその高さを自動拡張する tags: [JTextArea, FocusListener, JLabel, CardLayout] author: aterai pubdate: 2017-03-20T03:11:21+09:00 description: JTextAreaにフォーカスが当たったときその高さを自動拡張、外れたときに縮小します。 image: https://drive.google.com/uc?export=view&id=11MUj8pt3sndJr2o7ebuYFDE4gaRnE4AklA
概要
JTextArea
にフォーカスが当たったときその高さを自動拡張、外れたときに縮小します。
Screenshot
Advertisement
サンプルコード
textArea.addFocusListener(new FocusAdapter() {
@Override public void focusLost(FocusEvent e) {
String text = textArea.getText();
label.setText(text.isEmpty() ? " " : text);
cardLayout.show(cp, "TextField");
}
});
label.addFocusListener(new FocusAdapter() {
@Override public void focusGained(FocusEvent e) {
cardLayout.show(cp, "TextArea");
textArea.requestFocusInWindow();
}
});
View in GitHub: Java, Kotlin解説
- 上:
JTextArea
+FocusListener
JTextArea
にフォーカスが当たったときJTextArea#setRows(...)
で行数を拡張、外れたときに一行に縮小- 複数行分の文字列が入力されている状態で一行に縮小した場合、
JScrollPane
のスクロールボタンが表示される
- 下:
JLabel
+JTextArea
+CardLayout
+FocusListener
- フォーカス可能に設定した
JLabel
にJTextField
の文字色、背景色などを設定し、フォーカス状態が変更されたときCardLayout
でこれをJTextArea
と切り替えることで拡張縮小を実行 - 複数行分の文字列が入力されている状態で一行に縮小した場合、
JLabel
のデフォルトの切り詰めで末尾が...
に置換表示される JLabel
が空の場合、その高さが0
になってしまうので、その場合は空白文字を追加することで回避
- フォーカス可能に設定した