【发布时间】:2014-10-27 14:28:08
【问题描述】:
我的 JTree 有问题。 我的 JTree 显示(音乐、文档、图片、视频等),如 Windows 资源管理器。 例如,如果我单击一个节点并且该节点是一个包含 5 个(或更多)图像的文件夹 如何在 5 个单个 JLabels 中显示这 5 个图像???
【问题讨论】:
我的 JTree 有问题。 我的 JTree 显示(音乐、文档、图片、视频等),如 Windows 资源管理器。 例如,如果我单击一个节点并且该节点是一个包含 5 个(或更多)图像的文件夹 如何在 5 个单个 JLabels 中显示这 5 个图像???
【问题讨论】:
有两种方法可以解决这个问题。第一个(更简单)是将您的图像直接添加到 TreeModel 中,以便它们由 DefaultTreeCellRenderer 或其扩展呈现。第二,如果您不想将图像添加到您的 TreeModel,将创建一个自定义 TreeCellRenderer,它将所有图像绘制在一个组件中......但是您可能会遇到这种事件/布局问题。
另外,请理解 JTree 使用 Renderer,并且您实际上不能向 JTree 添加任何组件,您只能渲染数据项。
【讨论】:
好的,我用下面的代码得到了它,你会得到你点击的节点的路径...
MouseListener ml = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
TreePath selPath=MyTree.getPathForLocation(e.getX(), e.getY()); // <--- this was the part I searched for!
System.out.println(selPath);
if(selPath != null) {
if(e.getClickCount() == 1) {
mySingleClick(selPath);
}
else if(e.getClickCount() == 2) {
//myDoubleClick(selPath);
}
}
}
private void mySingleClick(TreePath selPath) {
// do whatever
}
};
MyTree.addMouseListener(ml);
有了这个我得到了路径,现在我可以使用路径来填充我的 JLabels 与图像。
【讨论】:
是的,在容器标签中使用带有 BoxLayout 的嵌套 JLabel:
JLabel mycontainer = new JLabel();
container.setLayout(new BoxLayout(mycontainer, BoxLayout.X_AXIS));
JLabel icon1Label = new JLabel();
JLabel icon2Label = new JLabel();
icon1Label.setIcon(icon1);
icon2Label.setIcon(icon2);
mycontainer.add(icon1Label);
mycontainer.add(icon2Label);
我已经向您展示了如何存储两张图片,您可以使用不同的布局来存储多张图片。
【讨论】: