我想在JTextPane的开头添加一个图像。我原来用过:
textPane.insertIcon(new ImageIcon("icon");
但这根本没有做任何事情,至少在我更改文档后使用了文本窗格。
所以我用的是样式。这是我使用的代码:
public QuotePanel(String quoted, DefaultStyledDocument quoteText) throws BadLocationException {
initComponents(); //Netbeans GUI builder, should be irrevelant
quotePane.setStyledDocument(quoteText); //QuotePane is a JTextPane declared as a global variable.
Style icon = quoteText.addStyle("Quote Icon", null);
ImageIcon quoteIcon = new ImageIcon(this.getClass().getResource("/images/posts/quotes.png"));
StyleConstants.setIcon(icon, quoteIcon);
quoteText.insertString(0, "Quotation Icon", icon);
quoteText.insertString(1, (quoted + " said: " + "\n\n"), null);
}
这很有效,但它有一些有趣的副作用。然后,这是我用来测试TextPane的主要方法:
public static void main(String args[]) {
QuotePanel quote = null;
try {
DefaultStyledDocument test = new DefaultStyledDocument();
test.insertString(0, "This is a test\n\n", null);
JTextPane pane = new JTextPane();
Style styleRed = pane.addStyle("Red", null);
StyleConstants.setForeground(styleRed, Color.red);
test.insertString(test.getLength() - 1, "This is red\n", styleRed);
Style styleBold = pane.addStyle("Bold", null);
StyleConstants.setBold(styleBold, true);
test.insertString(test.getLength() - 1, "This is Bold\n", styleBold);
Style styleSmall = pane.addStyle("Small", null);
StyleConstants.setFontSize(styleSmall, 8);
test.insertString(test.getLength() - 1, "This is small\n", styleSmall);
quote = new QuotePanel("Quoted Person", test);
} catch (Exception e) {
System.out.println("Oops, got an exception.");
e.printStackTrace();
System.exit(1);
}
JFrame frame = new JFrame("test");
frame.add(quote);
quote.setVisible(true);
frame.setSize(467, 126);
frame.validate();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
我得到的输出是:
为什么引号出现两次?我只在代码中出现一次。 (或者至少我只有一行添加它们)。我确实研究了为什么会这样,但我在其他任何地方都找不到这个问题。据我所知,在SO上没有关于这个问题的信息。
答案 0 :(得分:0)
好的,我没有弄清楚确切的答案,但我确实想出了如何将单个图像添加到JTextPane。
我的第一段代码是在正确的轨道上:
textPane.insertIcon(new ImageIcon("icon");
我需要知道的是insertIcon()
方法实际上将图像放在选择的位置。因此,为了正确放置图标,我需要选择我想放在首位的地方。
所以我使用了这段代码:
quotePane.select(0, 0);
quotePane.insertIcon(quoteIcon);
这产生了正确的输出,在JTextPane的开头只有一个图标。