我正在使用工具窗口开发Intellij Idea插件。在我的工具窗口中,我必须在树中所有子元素的附近都有一棵树和按钮。
我创建树并添加了按钮。一次,我将向您展示我的工作方式。
这是MyCellRenderer类
static class MyCellRenderer implements TreeCellRenderer, ActionListener {
JLabel label;
JButton button;
JPanel renderer;
DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer();
Color backgroundSelectionColor;
Color backgroundNonSelectionColor;
public MyCellRenderer(){
Border emptyBorder = BorderFactory.createEmptyBorder(2, 0, 2, 2);
renderer = new JPanel(new GridLayout(1,6));
label = new JLabel(" ");
label.setForeground(Color.black);
label.setBorder(emptyBorder);
button = new JButton();
button.setIcon(defaultSuppress);
//any of the button code under below didn't work now
button.setOpaque(false);
button.setContentAreaFilled(false);
button.setBorderPainted(false);
button.setSize(16,16);
renderer.add(label);
renderer.add(button);
}
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean
hasFocus) {
Component returnValue = null;
if ((value != null) && (value instanceof DefaultMutableTreeNode)) {Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
if (userObject instanceof Leaf) { // my tree gets elements title and icon from the Leaf class
Leaf leafObj = (Leaf) userObject;
label.setText(leafObj.getTitle());
button.setIcon(leafObj.getButtonImage());
renderer.setEnabled(tree.isEnabled());
returnValue = renderer;
}
}
if (returnValue == null) {
returnValue = defaultRenderer.getTreeCellRendererComponent(tree,value, selected, expanded, leaf, row, hasFocus);
}
return returnValue;
}
}
我还有另外一个类,我在该类中创建了树。我没有分享它,因为它可以与图标和元素名称一起正常使用。
这是我的问题,我想在每个子元素右侧的按钮上添加操作,但我做不到。
当用户单击此按钮时,将在ide上打开一个html页面。
有人可以帮我吗?从现在开始非常感谢!