- PR -

JEditorPaneのhtml表示選択時の改行

1
投稿者投稿内容
がう
会議室デビュー日: 2005/02/03
投稿数: 10
投稿日時: 2006-08-08 15:46
お世話になっています。

JEditorPane を使用して、html を表示をさせています。
コード:
    JEditorPane html = new JEditorPane("text/html","");
    html.setText("あああ<br>いいい<br>ううう<br>");


表示結果は以下のように改行表示されます。
コード:
    あああ
    いいい
    ううう


この表示結果を選択して、html.getSelectedText() の内容
をみると以下のようになり改行が入りません。
コード:
    あああ いいい ううう 


どのようにしたら、選択した内容を改行付きで取得できるのでしょうか?

以下実験ソースは、表示内容をマウスで選択して右クリックで
「コピー」すると内容をコンソールに出力するものです。
コード:
import java.awt.event.*;
import javax.swing.*;

public class HtmlTest {
    static JFrame frame;
    static JEditorPane html;
    static JPopupMenu popMenu;

    public static void main(String args[]) {
        popMenu = new JPopupMenu();
        popMenu.add("コピー").addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String copy = html.getSelectedText();
                System.out.println("コピー:"+copy);
            }
        });

        html = new JEditorPane("text/html","");
        html.setText("あああ<br>いいい<br>ううう<br>");
        html.addMouseListener(new java.awt.event.MouseListener() {
            public void mouseClicked(MouseEvent m) {}
            public void mouseEntered(MouseEvent m) {}
            public void mouseExited(MouseEvent m) {}
            public void mousePressed(MouseEvent m) {
                if (m.isPopupTrigger()) {
                    popMenu.show(m.getComponent(), m.getX(), m.getY());
                }
            }
            public void mouseReleased(MouseEvent m) {
                if (m.isPopupTrigger()) {
                    popMenu.show(m.getComponent(), m.getX(), m.getY());
                }
            }
        });

        frame = new JFrame("HtmlTest");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(html);
        frame.setSize(300,300);
        frame.setVisible(true);
    }
}

squeak
会議室デビュー日: 2005/05/31
投稿数: 6
投稿日時: 2006-08-13 18:41
html = new JEditorPane("text/html","");
のあとに
html.setDocument(new MyDocument());
とする。


コード:
class MyDocument extends HTMLDocument{
	public HTMLEditorKit.ParserCallback getReader(int pos) {
		Object desc = getProperty(Document.StreamDescriptionProperty);
		if (desc instanceof URL) {setBase((URL)desc);}
		return new MyReader(pos);
	}
    
	public class MyReader extends HTMLDocument.HTMLReader{
		public MyReader(int pos){super(pos);}
		
		protected void addSpecialElement(HTML.Tag t, MutableAttributeSet a) {
			super.addSpecialElement(t,a);
			if(t==HTML.Tag.BR){
				int size=parseBuffer.size();
				parseBuffer.removeElementAt(size-1);
				char[] c={'\\n'};//←このchar配列が出力される   
				parseBuffer.addElement(new ElementSpec(
				a.copyAttributes(), ElementSpec.ContentType,c,0,c.length));	
			}
		}
	}
}

がう
会議室デビュー日: 2005/02/03
投稿数: 10
投稿日時: 2006-08-18 00:18
squeakさま

大変ありがとうございました!
そっくりそのまま使わせていただきました(^_^;
1

スキルアップ/キャリアアップ(JOB@IT)