JTextareaとかJScrollPaneとか
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と重なったり。。




