JTextPane如何识别选中的图形~~……!!! 在JTextPane中如果输入了文本且插入了图形,那么在程序要重新获得JTextPane中选中的内容时:1.如何知道选中的是文本还是图形?2.文本可以用getSelectedText()获得,那图形怎么样获得呢?高分请教………… 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Up~~~~!!!JTextPane难道对图形的操作只有插入吗?插入之后就不能有其它的操作了吗?急 ~~~~~~~ 啊~~~~ 去研究一下JDK自带的演示程序 Stylepad吧,其中的ElementTreePanel.java中的caretUpdate()方法处理选择变化的事件,ElementTreeModel类中有解析文档结构的处理代码 可不可以说下思路,代码太长又没注视,实在不太好看啊~~是不是给JTextPane加入DocumentListener监听呢?那么怎么从DocmentEvent事件中知道改变的是文本还是图片呢? 怎么没人呢??Document中所谓的Element是按什么标准分的啊?有没有属性可以区分图像与文本呢? 比如我粘贴系统剪贴板上的内容到JTextPane中,这个动作可以由DocumentListener捕获,但是怎么进一步知道粘贴的是文本还是图片呢?帮帮忙吧,等了N天了…… import java.awt.BorderLayout;import javax.swing.*;import javax.swing.event.CaretEvent;import javax.swing.event.CaretListener;import javax.swing.text.AbstractDocument;import javax.swing.text.AttributeSet;import javax.swing.text.Element;import javax.swing.text.StyleConstants;public class TextPaneTest{ public static void main(String[] args) { final Icon icon = new ImageIcon(TextPaneTest.class.getResource("alice.gif")); final JTextPane tp = new JTextPane(); JScrollPane sp = new JScrollPane(tp); tp.insertIcon(icon); JFrame f = new JFrame(); f.getContentPane().add(sp, BorderLayout.CENTER); f.setSize(800, 600); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); tp.addCaretListener(new CaretListener() { public void caretUpdate(CaretEvent e) { AbstractDocument doc = (AbstractDocument) tp.getDocument(); Element[] rootEles = doc.getRootElements(); int selBegin = Math.min(e.getDot(), e.getMark()); int end = Math.max(e.getDot(), e.getMark()); for (int counter = 0; counter < rootEles.length; counter++) { int start = selBegin; while (start <= end) { Element ele = getLeafElement(rootEles[counter], start); AttributeSet attr = ele.getAttributes(); Object icon = attr.getAttribute(StyleConstants.IconAttribute); if (icon != null) { System.out.println(icon); } if (start >= ele.getEndOffset()) start++; else start = ele.getEndOffset(); } } } private Element getLeafElement(Element rootElement, int position) { Element child = rootElement.getElement(rootElement.getElementIndex(position)); while (!child.isLeaf()) { child = child.getElement(child.getElementIndex(position)); } return child; } }); }} java list鼠标事件问题 能给找个pdf格式的java参考大全吗? 请各位前辈帮菜鸟解决下关于graphics.drawline的错误。 更改皮肤效果 请问如何在用APPLET在网页上打开显示CAD图纸?急!! 如何使InputStream遍历两次? 我参照《JAVA2和新技术》最后一章的代码却编译不出来,,请教高手! 请问我该学什么了 求助:怎样做一个状态栏控件? 谁给我讲一下应用服务器? 关于线程的问题!! 为什么这样写编译不过??
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.Element;
import javax.swing.text.StyleConstants;public class TextPaneTest
{
public static void main(String[] args)
{
final Icon icon = new ImageIcon(TextPaneTest.class.getResource("alice.gif"));
final JTextPane tp = new JTextPane();
JScrollPane sp = new JScrollPane(tp);
tp.insertIcon(icon); JFrame f = new JFrame();
f.getContentPane().add(sp, BorderLayout.CENTER);
f.setSize(800, 600);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true); tp.addCaretListener(new CaretListener() {
public void caretUpdate(CaretEvent e)
{
AbstractDocument doc = (AbstractDocument) tp.getDocument();
Element[] rootEles = doc.getRootElements(); int selBegin = Math.min(e.getDot(), e.getMark());
int end = Math.max(e.getDot(), e.getMark());
for (int counter = 0; counter < rootEles.length; counter++) {
int start = selBegin;
while (start <= end) {
Element ele = getLeafElement(rootEles[counter], start); AttributeSet attr = ele.getAttributes();
Object icon = attr.getAttribute(StyleConstants.IconAttribute);
if (icon != null) {
System.out.println(icon);
} if (start >= ele.getEndOffset())
start++;
else
start = ele.getEndOffset();
}
}
}
private Element getLeafElement(Element rootElement, int position)
{
Element child = rootElement.getElement(rootElement.getElementIndex(position)); while (!child.isLeaf()) {
child = child.getElement(child.getElementIndex(position));
}
return child;
}
});
}
}