java - Accordion 菜单在 java 中显示一组图像

标签 java swing

我正在做一个 Java 项目,其中包含一些图形内容。我想在 Accordion 菜单之类的东西下显示一组 BufferedImages。这意味着当我单击一个 Accordion 菜单根项时,它应该显示该名称下的一组图像,而当单击另一个根菜单项时,它应该显示另一组图像。我如何用 Java 实现它?有没有办法将 JPanel 添加为 Accordion 菜单叶项?如果有人可以提供示例代码,那就太好了。

最佳答案

无法抗拒一些乐趣:事实证明,可以稍微调整 JXTaskPaneContainer(在 SwingX 中)使其表现得类似于 Accordion 。它只需要强制最多扩展其中一个包含的 JXTaskPaneContainer。类似于代码片段:

    JXTaskPaneContainer container = new JXTaskPaneContainer() {

        private JXTaskPane current;

        private PropertyChangeListener expansionListener;

        /**
         * @inherited <p>
         */
        @Override
        protected void addImpl(Component comp, Object constraints, int index) {
            super.addImpl(comp, constraints, index);
            if (comp instanceof JXTaskPane) {
                grabExpansionControl((JXTaskPane) comp);
            }
        }

        private void grabExpansionControl(JXTaskPane comp) {
            if (current != null) {
                comp.setCollapsed(true);
            } else {
                current = comp;
                comp.setCollapsed(false);
            }
            comp.addPropertyChangeListener("collapsed",
                    getExpansionListener());
        }

        private void updateCurrentTaskPane(JXTaskPane source) {
            if (source != current) {
                if (!source.isCollapsed()) {
                    if (current != null) {
                        current.setCollapsed(true);
                    }
                    current = source;
                }
            }
        }

        private PropertyChangeListener createExpansionListener() {
            PropertyChangeListener l = new PropertyChangeListener() {

                @Override
                public void propertyChange(PropertyChangeEvent evt) {
                    // TODO Auto-generated method stub
                    updateCurrentTaskPane((JXTaskPane) evt.getSource());
                }
            };
            return l;
        }


        private PropertyChangeListener getExpansionListener() {
            if (expansionListener == null) {
                expansionListener = createExpansionListener();
            }
            return expansionListener;
        }


    };
    ((VerticalLayout) container.getLayout()).setGap(0);

关于java - Accordion 菜单在 java 中显示一组图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6010498/

相关文章:

java - 使用 Java 从另一个 Windows 应用程序启动一个 Windows 应用程序

java - 获取 JComponent 的名称并在PreparedStatement 中指定为参数

java - 自定义字体不适用于 Android 5.0,但适用于其他地方

java - 无法在索引 0 处解析字符串

java - Spring 单例范围

java - 检查文件扩展名是否为 .txt 的程序

java - 边框布局与网格布局冲突

java - 在 Fragment 中使用 CustomView 发生 ClassCastException

java - 是否可以在 Grails 操作中使用 Spring 的 @RequestBody?

java - 在 java swing 中构建后,我的数据库会出现在 jar 文件中吗?