【问题标题】:Double icon for a tree structure in MatlabMatlab中树结构的双图标
【发布时间】:2011-12-14 16:00:06
【问题描述】:

我设计了如下树形结构:

function tree
import javax.swing.*
import javax.swing.tree.*;
[I,map] = checkedIcon;
javaImage_checked = im2java(I,map);
[I,map] = uncheckedIcon;
javaImage_unchecked = im2java(I,map);

% javaImage_checked/unchecked are assumed to have the same width
iconWidth = javaImage_unchecked.getWidth;

% create top node
root = uitreenode('v0','root', 'Results',[], 0);
% create children with checkboxes
Node1 = uitreenode('v0','Node1', 'Position', [], false);
root.add(Node1);
Node11 = uitreenode('v0','Node11', 'Cartesians Coordinates', [], true);
Node11.setIcon(javaImage_checked);
Node1.add(Node11);
Node12 = uitreenode('v0','Node12', 'Spherical Coordinates', [], true);
Node12.setIcon(javaImage_unchecked);
Node1.add(Node12);
Node2 = uitreenode('v0','Node2', 'Velocity', [], false);
root.add(Node2);
Node3 = uitreenode('v0','Node3', 'Acceleration', [], false);
root.add(Node3);

% set treeModel
treeModel = DefaultTreeModel(root);

% create the tree
[tree, container]= uitree('v0');
tree.setModel(treeModel);
% make root the initially selected node
tree.setSelectedNode(Node11);

 function [I,map] = checkedIcon()
    I = uint8(...
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0;
         2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,1;
         2,2,2,2,2,2,2,2,2,2,2,2,0,2,3,1;
         2,2,1,1,1,1,1,1,1,1,1,0,2,2,3,1;
         2,2,1,1,1,1,1,1,1,1,0,1,2,2,3,1;
         2,2,1,1,1,1,1,1,1,0,1,1,2,2,3,1;
         2,2,1,1,1,1,1,1,0,0,1,1,2,2,3,1;
         2,2,1,0,0,1,1,0,0,1,1,1,2,2,3,1;
         2,2,1,1,0,0,0,0,1,1,1,1,2,2,3,1;
         2,2,1,1,0,0,0,0,1,1,1,1,2,2,3,1;
         2,2,1,1,1,0,0,1,1,1,1,1,2,2,3,1;
         2,2,1,1,1,0,1,1,1,1,1,1,2,2,3,1;
         2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,1;
         2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,1;
         2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,1;
         1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1]);
     map = [0.023529,0.4902,0;
            1,1,1;
            0,0,0;
            0.50196,0.50196,0.50196;
            0.50196,0.50196,0.50196;
            0,0,0;
            0,0,0;
            0,0,0];
  end

  function [I,map] = uncheckedIcon()
     I = uint8(...
       [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;
        2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1;
        2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,1;
        2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,1;
        2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,1;
        2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,1;
        2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,1;
        2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,1;
        2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,1;
        2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,1;
        2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,1;
        2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,1;
        2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,1;
        2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,1;
        2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,1;
        1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1]);
     map = ...
      [0.023529,0.4902,0;
       1,1,1;
       0,0,0;
       0.50196,0.50196,0.50196;
       0.50196,0.50196,0.50196;
       0,0,0;
       0,0,0;
       0,0,0];
  end

  end

我希望能够显示一个附加图标(在选中/未选中图标的右侧和节点名称的左侧)。我想到的一个解决方案是用 jLabel 组件替换节点的名称。

icon2 = javax.swing.ImageIcon('image.jpg');
jLabel = javax.swing.JLabel('Cartesian Coordinates');
jLabel.setIcon(icon2);
Node11.setName(jLabel);

但是,上面的代码不起作用。我还尝试将 jLabel 组件添加到树节点但没有成功。我什至尝试修改 DefaultCheckBoxNode 的属性“setIcon”,但该组件没有该属性。所以,我问自己是否有解决我的问题的方法。

【问题讨论】:

    标签: swing matlab icons jtree nodes


    【解决方案1】:

    您可以创建一个由两个图标组合而成的图标,并排绘制,然后将该图标设置在树节点上。我不确定仅使用 MATLAB API 是否可以做到这一点,但我的理解是您可以直接在 MATLAB 中构造和使用 Java 对象,因此无论哪种方式都应该是可能的。

    看来setIcon() 方法接受Java Image 对象,而不是Icon 对象。以下是创建合成图像的一般策略:

    1. 创建一个具有适当宽度和高度的 BufferedImage 对象以容纳两个图标
    2. 使用BufferedImage.createGraphics()获取缓冲图像的Graphics2D对象
    3. 使用Graphics2D.drawImage()将每个图标绘制到缓冲图像中

    This questionthis question 可能对你有用。

    【讨论】:

    • 感谢您的回答。但是,我不懂Java编程,很难找到解决方案。
    猜你喜欢
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多