Summary
JViewportにBorderを設定して余白を作成します。
Screenshot

Advertisement
Source Code Examples
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, KotlinDescription
- 左:
JTextArea#setMargin(Insets)JTextAreaにsetMargin(Insets)で余白を設定- 行変更などのカーソル移動で先頭や末尾の余白分まではスクロールせず、上記のスクリーンショットのように余白が見えない状態になる場合がある
Java 8では再現しない?
- 右:
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の背景色が表示されてしまう
Reference
- JTextComponent#setMargin(...) (Java Platform SE 8)
- JScrollPane#setViewportBorder(...) (Java Platform SE 8)