Swing/ViewportBorder のバックアップ(No.7)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ViewportBorder へ行く。
- 1 (2014-01-15 (水) 15:52:35)
- 2 (2014-10-28 (火) 21:26:36)
- 3 (2015-03-25 (水) 16:48:56)
- 4 (2017-02-17 (金) 14:18:31)
- 5 (2017-06-06 (火) 14:18:34)
- 6 (2017-10-23 (月) 16:11:19)
- 7 (2019-05-04 (土) 21:40:58)
- 8 (2020-04-10 (金) 23:01:09)
- 9 (2021-10-15 (金) 01:17:39)
- 10 (2022-08-20 (土) 22:15:25)
- 11 (2025-01-03 (金) 08:57:02)
- 12 (2025-01-03 (金) 09:01:23)
- 13 (2025-01-03 (金) 09:02:38)
- 14 (2025-01-03 (金) 09:03:21)
- 15 (2025-01-03 (金) 09:04:02)
- category: swing
folder: ViewportBorder
title: JViewportにBorderを設定する
tags: [JViewport, Border, JScrollPane, JTextArea, Caret]
author: aterai
pubdate: 2014-01-13T00:01:30+09:00
description: JViewportにBorderを設定して余白を作成します。
image:
概要
JViewport
にBorder
を設定して余白を作成します。
Screenshot

Advertisement
サンプルコード
JTextArea textArea1 = new JTextArea("JTextArea#setMargin(Insets)\n\n" + INIT_TXT);
textArea1.setMargin(new Insets(5, 5, 5, 5));
JScrollPane scroll1 = new JScrollPane(textArea1);
JTextArea textArea2 = new JTextArea("JScrollPane#setViewportBorder(...)\n\n" + INIT_TXT);
textArea2.setMargin(new Insets(0, 0, 0, 1));
JScrollPane scroll2 = new JScrollPane(textArea2) {
@Override public void updateUI() {
setViewportBorder(null);
super.updateUI();
EventQueue.invokeLater(() -> {
Component c = getViewport().getView();
setViewportBorder(BorderFactory.createLineBorder(c.getBackground(), 5));
});
};
// scroll2.setViewportBorder(BorderFactory.createLineBorder(textArea2.getBackground(), 5));
View in GitHub: Java, Kotlin解説
- 左:
JTextArea#setMargin(Insets)
JTextArea
にsetMargin(Insets)
で余白を設定- 行変更などのカーソル移動で先頭や末尾の余白分まではスクロールされず、上記のスクリーンショットのように余白が見えない状態になる
- 右:
JScrollPane#setViewportBorder(...)
JTextArea#setMargin(new Insets(0, 0, 0, 1))
でJTextArea
自体の余白を変更すべて0
の場合、一番長い行の末尾でCaret
が表示されないJava 9
で修正済み- JDK-6866751 J2SE_Swing_Reg: the caret disappears when moving to the end of the line. - Java Bug System
JScrollPane#setViewportBorder(...)
でJViewport
の周囲に余白を設定- スクロールバーなどの有無によらず、この余白は常に表示されている
- 余白は
View
に設定したコンポーネントの背景色と色のLineBorder
で描画EmptyBorder
にするとJScrollPane
の背景色が表示されてしまう
参考リンク
- JTextComponent#setMargin(...) (Java Platform SE 8)
- JScrollPane#setViewportBorder(...) (Java Platform SE 8)