Netbeans手风琴组件 - java

在我正在从事的一个项目中,我们决定更改一些数据的表示形式。现在我们正在使用Netbeans ListView,到目前为止效果很好。但是现在我们想更改/扩展ListView以使其像手风琴一样工作。我们可以将ListView扩展为类似于手风琴,但是如果我们向每个单元格/行添加按钮或文本输入,则无法将actionListener附加到该按钮。似乎ListView侦听器始终位于swing组件的顶部。

有人对使用Netbeans Explorer API创建手风琴有什么建议吗?

我们可以创建类似这样的自定义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;
            }
        }
    }
}

Java Swing SearchBox模型 - java

我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。

Swing-典型桌面应用程序中的并发 - java

这可能是一个广泛的问题,但我想知道单用户桌面应用程序通常在何处使用并发。您如何发现理想情况下(在设计阶段)并发问题?附注:从操作系统理论上来说,并发问题通常发生在无法共享资源(例如打印机)的情况下。不过,我仍然对在编程级别上可能发生的情况感到迷惑。 java大神给出的解决方案 Event Dispatch thread与其他逻辑之间的Swing中可能存在线程…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…