如何通过单击JTree节点来显示内容

时间:2014-10-27 14:28:08

标签: java swing jlabel jtree

我的JTree有问题。 我的JTree显示(音乐,文档,图片,视频等),就像Windows资源管理器一样。 例如,如果我单击节点,此节点是包含5个(或更多)图像的文件夹 如何在5个单JLabel中显示这5个图像???

3 个答案:

答案 0 :(得分:0)

有两种方法可以解决这个问题。第一个(更简单)是将您的图像直接添加到TreeModel中,以便它们由DefaultTreeCellRenderer或其扩展来呈现。第二个,如果你不想将图像添加到你的TreeModel,那就是创建一个自定义的TreeCellRenderer来绘制一个Component中的所有图像...但是你可能会遇到事件/布局这样的问题

另外,要了解JTree使用渲染器,并且您实际上无法向JTree添加任何组件,您只能渲染数据项。

答案 1 :(得分:0)

好的,我用以下代码得到它,你会得到你点击的节点的路径......

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);

有了这个,我得到了路径,现在我可以使用路径用图像填充我的JLabel。

答案 2 :(得分:-1)

是的,在容器标签中使用嵌套的JLabel和BoxLayout:

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);

我已经向您展示了如何存储两个图像,您可以使用不同的布局来存储多个图像。