2

背景情報を次に示します。

JTextPane を拡張するクラスがあります。Web サイトからテキストをコピーすると、不要な書式設定要素とタグが表示されます。iframe、フォントなど。コードの別の部分でリンクをクリック可能なリンクに変更するため、JTextPane のタイプは html/text のままにする必要があります。

私の知る限り、Web から JTextPane にコピーして貼り付けると、自動的にフォーマットを維持しようとしますが、これが発生することは望ましくありません。

私は HTMLEditorKit を使用しており、別の大きなツールをリポジトリに追加したくありません。すべての要素と書式を貼り付けるのではなく、テキストを取得する簡単な方法はありますか?

4

2 に答える 2

0

DefaultEditorKit を使用せずにテキストをコピーして HtmlEditorKit に貼り付けたい場合は、独自の貼り付けコードを記述してみてください。

textPane.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK), "paste");

textPane.getActionMap().put("paste", pasteAction);

class PasteAction extends AbstractAction {

        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                int offset = textPane.getSelectionStart();
                Document sd=textPane.getDocument();
                String value = getClipboard();
                sd.remove(textPane.getSelectionStart(), textPane.getSelectionEnd()-textPane.getSelectionStart());
                textPane.getDocument().insertString(offset, value , null);
                if (value != null) {
                    textPane.setCaretPosition(offset + value.length());
                }
            } catch (Exception exc) {
                exc.printStackTrace();
            }
        }

}

このコードを使用して、クリップボードから純粋なテキストを取得します。

public String getClipboard() throws ClassNotFoundException, UnsupportedFlavorException {
    Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
    DataFlavor htmlStringFlavor = new DataFlavor("text/plain; class=java.lang.String");
    try {
        if (t != null && t.isDataFlavorSupported(htmlStringFlavor)) {
            String text = (String) t.getTransferData(htmlStringFlavor);
            return text;
        }
    } catch (UnsupportedFlavorException e) {
    } catch (IOException e) {
    }
    return null;
}

メニュー項目、ツールバー、またはその他のトリガーがある場合は、「貼り付け」アクションをそれらにバインドすることを忘れないでください。

于 2013-04-11T22:59:32.703 に答える