Home

読み込み中...

JTextareaとかJScrollPaneとか

2009/12/02

このエントリーをはてなブックマークに追加

JTextareaは、スクロール機能をサポートしていない。だが、Scrollableインターフェースを実装しているので、スクロール機能を持つことができるのだ。HTMLとかだと、textarea要素が一撃で全部サポートしてくれるので、JTextareaは一見不便だけど、そこはJava開発者の抽象化したい思惑があるのだろうか。。

import java.awt.BorderLayout;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JViewport;

public class TextPanel extends JPanel {

  public static final int DEFAULT_TEXTAREA_ROWS = 5;
  public static final int DEFAULT_TEXTAREA_COLS = 10;

  JScrollPane scrollPane;
  JTextArea textArea;

  public TextPanel() {
    setLayout(new BorderLayout());
    textArea = new JTextArea(DEFAULT_TEXTAREA_ROWS, DEFAULT_TEXTAREA_COLS);
    textArea.setLineWrap(true);
    scrollPane = new JScrollPane(textArea,
        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
        JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    scrollPane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
    add(scrollPane);
  }

  public void setText(String text) {
    textArea.setText(text);
  }
}

そんなわけで、上記のように書いたりすると、スクロール可能なテキストエリアを持つJPanelコンポーネントの出来上がりなのだ。

ちなみに、最初は、列と行を明示してなかったため、このコンポーネントを配備したときに、不自然な動作が多かった。setTextしたときに、他のJPanelと重なったり。。

Leave a comment