JTextPane
テキスト ペインの内容を出力する と ボタンで構成されるサンプル アプリケーションを作成しました。テキスト ペインのコンテンツ タイプは「text/html」に設定されています。
テキストを入力してコンソールに出力すると、テキストが自動的に折り返されます。
たとえば、次の入力があるとします。
Watercress shallot radish chickweed bitterleaf bush tomato salad garlic beet greens black-eyed pea green bean salsify bell pepper. Catsear celery green bean broccoli rabe spring onion tatsoi prairie turnip wattle seed cucumber burdock. Chickweed cucumber chickpea bush tomato wakame taro fava bean arugula catsear azuki bean.
出力はそのように出てきます
Watercress shallot radish chickweed bitterleaf bush tomato salad garlic
beet greens black-eyed pea green bean salsify bell pepper. Catsear celery
green bean broccoli rabe spring onion tatsoi prairie turnip wattle seed
cucumber burdock. Chickweed cucumber chickpea bush tomato wakame taro fava
bean arugula catsear azuki bean.
入力テキストの形式を保持する方法はありますか? 入力をデータベースに保存する予定なので、改行文字を に置き換えて<br>
いますが、テキスト ペインは独自の改行を自動的に挿入しています。
別の解決策がある場合は、それらも試すことができますが、ほとんどの場合、ユーザーが入力を変更できるようにしながら、HTML を表示できるようにしたいと考えています。
これがサンプルのコードです。コンパイルして実行するだけでよいはずです。
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextPane;
public class TextPaneTest extends JFrame {
private JTextPane textPane = null;
public static void main(String args[]) {
new TextPaneTest();
}
public TextPaneTest() {
// Main panel
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
// Panel holding text
JPanel textPanel = new JPanel();
textPanel.setLayout(new BorderLayout());
// Text pane
textPane = new JTextPane();
textPane.setContentType("text/html");
// Button
JButton button = new JButton();
button.setText("Print Text");
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String text = textPane.getText();
text = text.substring(text.indexOf("<body>") + 6, text.indexOf("</body>"));
System.out.println(text);
}
});
textPanel.add(textPane);
panel.add(textPanel, BorderLayout.CENTER);
panel.add(button, BorderLayout.SOUTH);
// Add everything to the frame
this.add(panel);
this.setSize(1000, 500);
setVisible(true);
}
}