我有一个声明如下的JTextPane:
JTextPane box = new JTextPane();
JScrollPane scroll = new JScrollPane();
StyledDocument doc = box.getStyledDocument();
scroll.setViewportView(box);
scroll = new JScrollPane(box);
我正在附加文字如下:
public void appendChatText(String text)
{
try
{
doc.insertString(doc.getLength(), text, null);
box.setAutoscrolls(true);
box.setCaretPosition(box.getDocument().getLength());
}
catch(BadLocationException e)
{
e.printStackTrace();
}
}
我还设法轻松地让JTextPane根据需要显示图像和组件,但我无法弄清楚如何将可点击文本编码到JTextPane中。例如,我希望它打印一条消息,上面写着“文件上传到服务器。接受 *拒绝*”,如果用户点击接受或拒绝字符串,那么它会执行相应的功能。关于如何有效实现这一目标的任何想法?
答案 0 :(得分:7)
我最终用MouseListener和一个扩展AsbstractAction的类来解决这个问题。我添加了我想要成为JTextPane的可点击链接的文本,如下所示:
`Style regularBlue = doc.addStyle("regularBlue", StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE));
StyleConstants.setForeground(regularBlue, Color.BLUE);
StyleConstants.setUnderline(regularBlue, true);
regularBlue.addAttribute("linkact", new ChatLinkListener(textLink));
doc.insertString(doc.getLength(), textLink, regularBlue);`
我在其他地方的JTextPane上初始化了MouseListener,并将以下代码添加到我的侦听器类中:
public void mouseClicked(MouseEvent e)
{
Element ele = doc.getCharacterElement(chatbox.viewToModel(e.getPoint()));
AttributeSet as = ele.getAttributes();
ChatLinkListener fla = (ChatLinkListener)as.getAttribute("linkact");
if(fla != null)
{
fla.execute();
}
}
最后,这引用了实际执行操作的类:
class ChatLinkListener extends AbstractAction
{
private String textLink;
ChatLinkListener(String textLink)
{
this.textLink = textLink;
}
protected void execute()
{
if("accept".equals(url))
{
//execute code
}
else if("decline".equals(url))
{
//execute code
}
}
public void actionPerformed(ActionEvent e)
{
execute();
}
}
答案 1 :(得分:3)
我还设法轻松获取JTextPane以根据需要显示图像和组件 ...我希望它能打印一条消息,上面写着“文件上传到服务器。接受拒绝”
为什么不为“接受”和“拒绝”添加按钮?
否则您可以使用JEditorPane来显示HTML。然后,您可以在“接受”和“拒绝”文本中添加HyperlinkListener。阅读JEditorPane API以获取示例。单击文本时,HyperlinkListener需要一个URL,但我认为没有任何理由它不能只是一个字符串。
答案 2 :(得分:2)
将 mouselistener 添加到您想要点击的文本并执行适当的操作。
答案 3 :(得分:2)
如果您不想使用按钮,请使用JLabel。
如果您正在使用JTextPane,则可以使用insertComponent()方法插入与JTextPane字体具有相同字体的新JLabel,并且可以按照您希望的方式自定义JLabel,例如将光标设置为手形光标给它一个可点击的外观和感觉。
JLabel l=new JLabel("Click me");
l.setFont(textPane.getFont());
l.setCursor(new Cursor(Cursor.HAND_CURSOR));
l.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent me)
{
// your code
}
});
textPane.insertComponent(l);
答案 4 :(得分:0)
我认为它是你想要的“JOptionPane”类 它应该给你选项按钮 - 例如:(“ok”/“取消”)