JavaのJTextPaneとJEditorPaneの違いとは?特徴と使い分けを解説
Swingでテキストを扱うコンポーネントとしてよく使われるのが JTextPane と JEditorPane の2つです。この2つは似た用途に見えますが、実は明確な違いがあります。
JTextPane は JEditorPane を拡張したクラスであり、フォント、文字スタイル、色などのワープロ的な機能を提供します。高度なテキスト処理が必要な場合には、このクラスを使用するのが適しています。一方、JEditorPane は HTML や RTF コンテンツの表示・編集をサポートしており、独自の EditorKit を作成することで機能を拡張することも可能です。
JTextPaneの特徴
- JTextPane は JEditorPane のサブクラスです。
- 埋め込み画像やコンポーネントを含むスタイル付きドキュメント(StyledDocument)を扱うために使用されます。
- グラフィカルに表現される属性でマークアップできるテキストコンポーネントであり、デフォルトのモデルとして DefaultStyledDocument を使用します。
- 主なメソッドには、addStyle()、getCharacterAttributes()、getStyledDocument()、setDocument()、setEditorKit()、setStyledDocument() などがあります。
JTextPaneのサンプルコード
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class JTextPaneTest {
public static void main(String args[]) throws BadLocationException {
JFrame frame = new JFrame("JTextPane Test");
Container cp = frame.getContentPane();
JTextPane pane = new JTextPane();
SimpleAttributeSet set = new SimpleAttributeSet();
StyleConstants.setBold(set, true);
pane.setCharacterAttributes(set, true);
pane.setText("Welcome to");
set = new SimpleAttributeSet();
StyleConstants.setItalic(set, true);
StyleConstants.setForeground(set, Color.blue);
Document doc = pane.getStyledDocument();
doc.insertString(doc.getLength(), " Tutorials ", set);
set = new SimpleAttributeSet();
StyleConstants.setFontSize(set, 20);
doc.insertString(doc.getLength(), " Point", set);
JScrollPane scrollPane = new JScrollPane(pane);
cp.add(scrollPane, BorderLayout.CENTER);
frame.setSize(375, 250);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}このサンプルでは、1つのテキストペイン内で「太字」「斜体+青色」「フォントサイズ20」という異なるスタイルを段落ごとに適用しています。これが JTextPane の強みです。
JEditorPaneの特徴
- JEditorPane は、さまざまなテキスト形式を表示できる一種のテキストエリアです。
- デフォルトで HTML と RTF(Rich Text Format) をサポートしており、特定のコンテンツタイプに対応する独自のエディタキットを作成することもできます。
- setContentType() メソッドで表示したいドキュメントの種類を選択し、setEditorKit() メソッドでカスタムエディタを明示的に設定できます。
JEditorPaneのサンプルコード
import javax.swing.*;
public class JEditorPaneTest extends JFrame {
public JEditorPaneTest() {
setTitle("JEditorPane Test");
JEditorPane editorPane = new JEditorPane();
editorPane.setContentType("text/html");
editorPane.setText("<h1>Java</h1><p>is a general-purpose computer programming language that is concurrent, class-based, object-oriented, and specifically designed to have as few implementation dependencies as possible.</p>");
setSize(350, 275);
setContentPane(editorPane);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] a) {
new JEditorPaneTest();
}
}このサンプルでは、setContentType("text/html") を指定することで、HTMLタグを含む文字列がそのまま整形されて表示されます。簡易的なHTMLビューアを作りたい場合に便利です。
使い分けのポイント
まとめると、以下のように使い分けるのがおすすめです。
- リッチな書式設定(太字・色・フォントサイズなど)や画像の埋め込みが必要な場合 → JTextPane
- HTMLやRTFの表示・編集など、特定のコンテンツ形式を扱いたい場合 → JEditorPane
JTextPane は JEditorPane のサブクラスであるため、JEditorPane の機能もそのまま利用できます。ただし、単純なHTML表示だけであれば JEditorPane の方が軽量でシンプルに実装できるため、目的に応じて選択しましょう。
-
JavaのJFrameとJDialogの違いとは?特徴と使い分けを解説
JavaのSwingには、ウィンドウを表示するためのトップレベルコンテナとしてJFrameとJDialogが用意されています。どちらもよく似た役割を持ちますが、動作や用途には重要な違いがあります。この記事では、それぞれの特徴をサンプルコードとともに解説し、最後に使い分けのポイントをまとめます。 JFrameとは フレームに追加されたコンポーネントは「コンテンツ」として扱われ、contentPaneによって管理されます。JFrameにコンポーネントを追加する際は、フレーム本体ではなくcontentPaneに対して追加する必要があります。 JFrameは、タイトル、境界線、(オプションで)メニュ
-
JavaのGridLayoutとGridBagLayoutの違いを徹底解説!特徴と使い分けのポイント
JavaのAWT/Swingには複数のレイアウトマネージャーが用意されていますが、その中でもGridLayoutとGridBagLayoutは、コンポーネントを格子状(グリッド)に配置するという点でよく似ています。しかし、両者には重要な違いがあります。 GridLayoutは、すべてのコンポーネントを矩形のグリッド内に配置し、領域を同じサイズの長方形に分割して、各コンポーネントをそれぞれのセルの中に収めます。一方、GridBagLayoutは柔軟性の高いレイアウトマネージャーであり、コンポーネントのサイズを揃えることなく、縦方向・横方向に整列させて配置できます。各GridBagLayoutオブ