1

私のswingアプリには、ユーザーがWYSIWYG形式でテキストを編集できるJEditorPaneが含まれています。これには、太字、斜体、フォントの設定などのツールバーボタンが含まれます。

JEdi​​torPaneのコンテンツタイプはtext/htmlです。

問題:ユーザーは、エディターペインにタブ文字を入力し、編集ダイアログを閉じて(HTMLテキストを永続ストレージに保存)、タブがレンダリングされることを確認したいと考えています。ただし、HTMLはすべての空白の実行を単一のスペースとして扱います。

public class NoteTest {
    public static void main(String[] args) {
        final JEditorPane editPane1 = new JEditorPane("text/html", "Try typing some tabs");
        editPane1.setPreferredSize(new Dimension(400, 300));
        JOptionPane.showMessageDialog(null, new JScrollPane(editPane1));
        JOptionPane.showMessageDialog(null, new JScrollPane(new JEditorPane("text/html", editPane1.getText()))); // where did the tabs go?
    }
}

最初のJEditorPaneにタブを入力した後、そこからHTMLテキストを取得し、それを2番目のJEditorPaneに渡します。これにより、タブがスペースとしてレンダリングされます。

これらのタブをレンダリングするにはどうすればよいですか?ユーザーが入力したコンテンツをHTMLではなくRTFとして保存する必要がありますか?HTMLを解析して、行とセルを含むHTMLテーブルを作成する必要があります(ugh)。または、swingにタブ文字をタブとしてレンダリングするように指示する方法はありますか?

4

2 に答える 2

3

より早く助けが必要な場合は、SSCCEを投稿してください。このSSCCEは、説明した動作を示していません。

タブ付きのテキスト

nの&gの間の「タブ」に注意してくださいtypin g

import java.awt.Dimension;
import javax.swing.*;

public class NoteTest {
    public static void main(String[] args) {
        final JEditorPane editPane1 = new JEditorPane("text/html", "Try typing some tabs");
        editPane1.setPreferredSize(new Dimension(400, 300));
        JOptionPane.showMessageDialog(null, new JScrollPane(editPane1));
        JOptionPane.showMessageDialog(null, new JScrollPane(new JEditorPane("text/html", editPane1.getText()))); // where did the tabs go?
    }
}

pre最後に消えたタブがいくつかありましたが、要素に含まれていない限り、タブはHTMLで正しくサポートされていないため、それは理にかなっています。SwingHTML解析はそれらを冗長として無視していると思います。

于 2012-05-15T21:08:32.770 に答える
1

テキストとタブ文字に<PRE></PRE>タグを使用するとどうなりますか?

于 2012-05-16T05:59:33.227 に答える