gpt4 book ai didi

java - Netbeans Accordion 组件

转载 作者:行者123 更新时间:2023-12-02 11:07:24 24 4
gpt4 key购买 nike

在我正在进行的一个项目中,我们决定更改一些数据的呈现方式。现在我们使用 Netbeans ListView,到目前为止效果很好。但现在我们想要更改/扩展 ListView 以像 Accordion 一样工作。我们可以将 ListView 展开为看起来像 Accordion ,但如果我们向每个单元格/行添加按钮或文本输入,我们就无法将 actionListener 附加到该按钮。看起来 ListView 监听器始终位于 swing 组件之上。

有人对如何使用 Netbeans Explorer API 创建 Accordion 有任何建议吗?

我们可以创建像这样的自定义 Swing 组件,实际上网络上已经存在一个。如果我们创建一个,我们需要将 Lookup 与我们的自定义 Swing 组件连接起来,以便与 Netbeans API 正常工作。仅当没有其他选择时我们才想这样做。谷歌搜索此类使用 Netbeans API 的组件没有给出任何有用的结果。

最佳答案

取自 Toni Epples blog

请注意:

  • 这使用 JXTaskPane
  • 这是一个不是动态的示例

代码示例

public class TaskPaneView extends JScrollPane {

private transient ExplorerManager manager;
// create a taskpanecontainer
JXTaskPaneContainer taskpanecontainer = new JXTaskPaneContainer();
/** Listener to nearly everything */
transient Listener managerListener;
/** weak variation of the listener for property change on the explorer manager */
transient PropertyChangeListener wlpc;

/** True, if the selection listener is attached. */
transient boolean listenerActive;

// UI Settings:
Font labelFont = new Font("Segoe UI", Font.BOLD, 14);
Painter backgroundPainter = new MattePainter(Color.white);

public TaskPaneView() {
setViewportView(taskpanecontainer);
}

public void setBackground(Painter background) {
this.backgroundPainter = background;
}

public void setLabelFont(Font labelFont) {
this.labelFont = labelFont;
}

@Override
public void addNotify() {
super.addNotify();
ExplorerManager em = ExplorerManager.find(this);
if (em != manager) {
if (manager != null) {
manager.removePropertyChangeListener(wlpc);
}
manager = em;
manager.addPropertyChangeListener(wlpc = WeakListeners.propertyChange(managerListener, manager));
Node root = manager.getExploredContext();
setRootNode(root);
} else {
// bugfix #23509, the listener were removed --> add it again
if (!listenerActive && (manager != null)) {
manager.addPropertyChangeListener(wlpc = WeakListeners.propertyChange(managerListener, manager));
}
}
}

/** Removes listeners.
*/
@Override
public void removeNotify() {
super.removeNotify();
listenerActive = false;
// bugfix #23509, remove useless listeners
if (manager != null) {
manager.removePropertyChangeListener(wlpc);
}
}

private void setRootNode(Node root) {
//throw new UnsupportedOperationException("Not yet implemented");
taskpanecontainer.removeAll();

System.out.println("root node set " + root);
Node[] children = root.getChildren().getNodes();
for (int i = 0; i < children.length; i++) {
Node node = children[i];
JXTaskPane taskPane = new JXTaskPane();
taskPane.setName(node.getName());
taskPane.setCollapsed(true);
taskPane.setTitle(node.getDisplayName());
taskPane.setIcon(new ImageIcon(node.getIcon(BeanInfo.ICON_COLOR_16x16)));
Action [] actions = node.getActions(true);
for (int j = 0; j < actions.length; j++) {
Action action = actions[j];
taskPane.add(action);
}
taskpanecontainer.add(taskPane);
}
}

private final class Listener implements PropertyChangeListener {

public void propertyChange(PropertyChangeEvent evt) {

if (ExplorerManager.PROP_EXPLORED_CONTEXT.equals(evt.getPropertyName())) {
setRootNode(manager.getExploredContext());
return;
}
}
}
}

Example image

关于java - Netbeans Accordion 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8724154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com