当用户将鼠标光标悬停在treetable中的特定项目上时,我希望显示一种特殊的工具提示。此工具提示将是PDF的缩略图,对应于光标指向的treetable中的项目。此外,我希望用户能够将光标移动到缩略图上并单击它,这应该在他们系统的默认PDF阅读器(Acrobat,Adobe Reader等)中打开完整的PDF。 )。
我意识到这是一项艰巨的任务,但我已经完成了大部分工作。我已经在我的庞大程序中找到了我需要setToolTip()
方法的确切位置,以便它可以检索相应的缩略图。此外,由于我发现让Java在运行中创建缩略图非常困难,我已经设置了一些内容,因此会预先制作缩略图JPG。因此,所有setToolTip()
命令都需要以某种方式检索相应的JPG。现在是困难的部分。
起初,这似乎很容易。我试过this really convenient hack for putting an image in a tooltip,它肯定会让缩略图正确显示。但是,使用锚标记<img>
)围绕<a href="...">...</a>
标记似乎并不起作用。缩略图被告诉蓝色边框包围,好吧,但图像仍然无法点击。此外,工具提示有时会在点击图像之前消失。
所以我认为我可能需要做一些比简单的html黑客更深入的事情。我试过this more involved way of putting an image in a tooltip,但似乎只适用于静态图像。我需要根据鼠标光标悬停的图像来区分图像。此外,如何设置我的方法以使用此工具提示的自定义版本&#39;而不是内置的?
为了给出更多的上下文,setToolTip()
方法似乎工作的位置在getTreeCellRendererComponent()
方法的内部,是扩展JPanel
并实现{的自定义类的一部分{1}}。如果被问到我会发布代码,但它可能会相当复杂并且难以理解。有什么想法吗?
编辑10/09/2014,下午4:57:这些代码中的大部分都可能令人困惑,为此,我道歉。我只想说它与在JXTreeTable中放置一个三态复选框有关。无论如何,重要的部分应该很容易挑出来,我希望。如您所见,此类已扩展TreeCellRenderer
,因此我也无法扩展JPanel
。
JToolTip
我知道我需要以某种方式扩展JToolTip,并且此SkyCheckTreeCellRenderer类需要以某种方式引用该自定义工具提示。我想所有这些只是变得如此复杂,以至于我的简单大脑无法绕过它。道歉。
答案 0 :(得分:2)
如何设置我的方法以使用此工具提示的自定义版本&#39;而不是内置的?
如示例所示,您需要扩展组件以使用自定义工具提示。
我需要根据鼠标光标悬停的图像来区分图像
然后,您需要覆盖getToolTipText(MouseEvent)
方法以返回文本字符串以表示您要显示的图像。
但是,使用锚标记(...)包围标记似乎无法正常工作
如果要回复超链接,则需要使用JEditorPane。阅读JEditorPane API以获取示例。
所以基本上我建议您需要使用自定义JToolTip,它使用JEditorPane来显示带有适当超链接的相应图像。下面是一个示例,说明如何将JLabel用作工具提示的附加组件。您应该能够修改代码以使用JEditorPane。
此外,您需要扩展树表以使用此自定义JToolTip。
import java.awt.*;
import java.awt.image.BufferedImage;
import java.net.URL;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
public class ToolTipImage extends JToolTip
{
private Image image;
public ToolTipImage(Image image)
{
this.image = image;
setLayout( new BorderLayout() );
add( new JLabel( new ImageIcon( image) ) );
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(image.getWidth(this), image.getHeight(this));
}
private static void createAndShowGUI() throws Exception
{
final BufferedImage testImage = ImageIO.read(new File("dukewavered.gif"));
String[] columnNames = {"Column 0", "Column 1"};
Object[][] data =
{
{"Cell 0,0", "Cell 0,1"},
{"Cell 1,0", "Cell 1,1"}
};
JTable table = new JTable(data, columnNames)
{
public JToolTip createToolTip()
{
return new ToolTipImage( testImage );
}
};
// Set tool tip text so that table is registered w/ tool tip manager
table.setToolTipText(" ");
JFrame frame = new JFrame("Tool Tip Image");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new JScrollPane(table) );
frame.setLocationByPlatform( true );
frame.pack();
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
createAndShowGUI();
}
catch(Exception e) { System.out.println(e); }
}
});
}
}
答案 1 :(得分:1)
听起来您需要构建自定义工具提示,如detailed in JToolTip。
单击时,应使用Runtime从命令行打开文件。在Windows中执行此操作的方法是here。在ubuntu上执行此操作的方法是here