Я разработал следующую структуру дерева:Двойного значка для структуры дерева в Matlab
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 в treenode без успеха. Я даже попытался изменить свойство setIcon для DefaultCheckBoxNode, но этот компонент не обладает этим свойством. Итак, я спросил себя, есть ли какое-то решение для моей проблемы.
Благодарим вас за ответ. Однако я не знаю программирования Java, и мне сложно получить решение. – julian