Swing/ExpandingTextArea の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/ExpandingTextArea へ行く。
- Swing/ExpandingTextArea の差分を削除
--- 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?id=11MUj8pt3sndJr2o7ebuYFDE4gaRnE4AklA hreflang: href: https://java-swing-tips.blogspot.com/2017/12/automatically-extend-its-height-when.html lang: en --- * 概要 [#summary] `JTextArea`にフォーカスが当たったときその高さを自動拡張、外れたときに縮小します。 #download(https://drive.google.com/uc?id=11MUj8pt3sndJr2o7ebuYFDE4gaRnE4AklA) * サンプルコード [#sourcecode] #code(link){{ 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(); } }); }} * 解説 [#explanation] - 上: `JTextArea` + `FocusListener` -- `JTextArea`にフォーカスが当たったとき`JTextArea#setRows(...)`で行数を拡張、外れたときに一行に縮小 -- `JTextArea`にフォーカスが当たったとき`JTextArea#setRows(...)`で行数を拡張、フォーカスが外れたときに一行に縮小 -- 複数行分の文字列が入力されている状態で一行に縮小した場合、`JScrollPane`のスクロールボタンが表示される - 下: `JLabel` + `JTextArea` + `CardLayout` + `FocusListener` -- フォーカス可能に設定した`JLabel`に`JTextField`の文字色、背景色などを設定し、フォーカス状態が変更されたとき`CardLayout`でこれを`JTextArea`と切り替えることで拡張・縮小を実行 -- 複数行分の文字列が入力されている状態で一行に縮小した場合、`JLabel`のデフォルトの切り詰めで末尾が`...`に置換表示される -- `JLabel`のテキストを無しにすると高さが`0`になってしまうので、空白文字を追加することで回避 -- `JLabel`のテキストを無しにすると高さが`0`になってしまうので空白文字を追加することで回避 * 参考リンク [#reference] - [https://stackoverflow.com/questions/42847168/it-is-posible-to-expand-a-jtextarea-or-jtextpane-by-clicking-on-it java - It is posible to expand a JTextArea or JTextPane by clicking on it? - Stack Overflow] * コメント [#comment] #comment #comment