私は、順序付けされていないリストアイテムをJTextPane
に挿入するボタンを持っています。しかし、リストアイテムを挿入するためにボタンをクリックすると、1つではなく2つの箇条書きが挿入されます。 1回の弾丸は、最初の挿入時にのみ挿入されます。ダブルリストJTextPaneでのアイテムの挿入
私のアプリケーションから機能を切り取り、コードを小さなSSCCE(以下)に貼り付けても問題は残ります。ここに何が起こっているのか誰にも分かりますか?
[問題は解決されました。以下は完全な解決コードです。これを行うには2通りの方法があります。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Element;
import javax.swing.text.ElementIterator;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
public class Main {
private static Button2 show = new Button2 ("Show");
private static LIButton bullets = new LIButton("Bullets", HTML.Tag.UL);
private static JEditorPane pane = new JEditorPane();
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
create();
}
});
}
private static void create() throws HeadlessException {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.setPreferredSize(new Dimension(300, 300));
pane.setContentType("text/html");
frame.add(pane, BorderLayout.CENTER);
JPanel panel = new JPanel();
panel.add(bullets);
panel.add(show);
frame.add(panel, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
static class LIButton extends JButton {
static final String LI_HTML = "<HTML><BODY><UL><LI></LI></UL></BODY></HTML>";
public LIButton(String name, HTML.Tag parent) {
super(new HTMLEditorKit.InsertHTMLTextAction(
name, LI_HTML, HTML.Tag.UL, HTML.Tag.LI, HTML.Tag.BODY, HTML.Tag.UL));
}
}
static class Button2 extends JButton implements ActionListener {
static final String LI_HTML = "<HTML><BODY><UL><LI></LI></UL></BODY></HTML>";
public Button2(String name) {
super(name);
this.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent ae) {
HTMLDocument doc = (HTMLDocument) pane.getDocument();
HTMLEditorKit kit = (HTMLEditorKit) pane.getEditorKit();
try {
kit.insertHTML(doc, doc.getLength() - 1, LI_HTML, 0, 1, null);
} catch (BadLocationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
私はHTMLを追加する方法を理解することができていたことがありませんが、私はあなたのテキスト文字列は、HTMLおよびBODYタグを含めるべきではないと思いますが、リスト項目のテキストのみ/タグ? – camickr
本当ですか!そして、Javadocsはそれを少しでも簡単にしません。上記のコードを修正して、ソリューションを追加しました。 – user396089
trashgodのソリューションは、投稿されたソリューションの方が意味があります。すでに提案したように、HTMLタグとBODYタグを含む文字列を挿入するのは意味がありません。元のテキスト文字列にのみこれらのタグを含める必要があります。ドキュメントへの挿入には、挿入する新しいタグが含まれている必要があります。 – camickr