정렬되지 않은 목록 항목을 JTextPane
에 삽입하는 버튼이 있습니다. 그러나 단추를 클릭하여 목록 항목을 삽입하면 두 개의 글 머리가 하나 대신 삽입됩니다. 하나의 글 머리 기호는 처음 삽입하는 동안에 만 삽입됩니다.JTextPane의 이중 목록 항목 삽입
내 응용 프로그램에서 기능을 잘라내어 코드를 작은 SSCCE (아래)에 붙여 넣으면 문제가 남아 있습니다. 여기에 무슨 일이 일어날 지 아무도 모른다.
[문제가 해결되었습니다. 아래는 완전한 해결 된 코드입니다. 이 작업을 수행하는 방법은 두 가지가 있으며, 쇼 및 글 머리 기호 버튼의 기능을 참조하십시오.
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