Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类中SwingX的JXCollapsiblePane正在影响该类创建的其他对象中创建的所有其他窗格_Java_Swing_Layout Manager_Grid Layout_Swingx - Fatal编程技术网

Java 类中SwingX的JXCollapsiblePane正在影响该类创建的其他对象中创建的所有其他窗格

Java 类中SwingX的JXCollapsiblePane正在影响该类创建的其他对象中创建的所有其他窗格,java,swing,layout-manager,grid-layout,swingx,Java,Swing,Layout Manager,Grid Layout,Swingx,我有一个类为GridLayout中的网格创建元素,它基本上由4个打包在一起的面板组成 我希望其中一个面板(包含一个JTextArea)是可折叠的,因为它相当冗长,我不希望它占用这么多屏幕空间。很自然,我遇到了SwingX库并使用JXCollapsiblePane来实现这一点,尽管它可以按预期工作,但似乎只要我单击其中一个JXCollapsiblePane上的切换按钮,它就会影响所有其他JXCollapsiblePane。它实际上并没有打开它们,但它使窗口扩展以容纳空间,就像它们被打开一样。如果你

我有一个类为GridLayout中的网格创建元素,它基本上由4个打包在一起的面板组成

我希望其中一个面板(包含一个JTextArea)是可折叠的,因为它相当冗长,我不希望它占用这么多屏幕空间。很自然,我遇到了SwingX库并使用JXCollapsiblePane来实现这一点,尽管它可以按预期工作,但似乎只要我单击其中一个JXCollapsiblePane上的切换按钮,它就会影响所有其他JXCollapsiblePane。它实际上并没有打开它们,但它使窗口扩展以容纳空间,就像它们被打开一样。如果你想要更好的描述,我可以拍照,但以后再拍。我该怎么做才能让它不那么做?我很确定我没有使用任何静态属性,所以我不确定它为什么会这样做

顺便说一句,如果有人能告诉我这是否是正确的编码风格(我觉得我现在做的超级嵌套面板效率很低,是Swing的新手),那就太好了

以下是我的项目中的相关代码片段:

        JXCollapsiblePane collapsiblePane = new JXCollapsiblePane();
        JButton toggle = new JButton(collapsiblePane.getActionMap().get(JXCollapsiblePane.TOGGLE_ACTION));
        toggle.addActionListener(e -> {
            toggle.setText(collapsiblePane.isCollapsed() ? "▼" : "▶");
        });
        toggle.setText("▶");
        toggle.setPreferredSize(new Dimension(20, 20));
        Border emptyBorder = BorderFactory.createEmptyBorder();
        toggle.setBorder(emptyBorder);
        resultTextPanel.add(toggle);
        collapsiblePane.setCollapsed(true);
        collapsiblePane.setSize(250, 60);
        gridElemPanel.add(resultTextPanel, BorderLayout.NORTH);
         ...
        if (ngramText != null && !ngramText.contains("null")) {
            JTextArea ngramLabel = new JTextArea(ngramText);
            ngramLabel.setLineWrap(true);
            ngramLabel.setWrapStyleWord(true);
            ngramLabel.setFont(new Font("Courier", Font.PLAIN, 12));
            JScrollPane scrollPane = new JScrollPane(ngramLabel);
            scrollPane.setPreferredSize(new Dimension(250, 60));
            scrollPane.getHorizontalScrollBar().setUnitIncrement(16);
            collapsiblePane.add(scrollPane);
            collapsiblePane.setPreferredSize(scrollPane.getPreferredSize());
            gridElemPanel.add(collapsiblePane, BorderLayout.SOUTH);
        }
:

容器被分成大小相等的矩形

所以当你改变一个,所有的都会相应地改变


如果你需要更多的灵活性(以更复杂的价格考虑)。

:“容器被分成大小相等的矩形”,所以当你改变一个时,所有的都会相应地改变。但是,有没有一个解决办法我可以做?我宁愿保持原样,因为它看起来不错。也许我可以这样做,开始时它们看起来都是展开的,因为目前的情况是,每个网格元素的大小都受长方体在折叠时的外观的限制,当您展开某个对象时,它会调整所有网格长方体的大小,使其变为相同的大小。编辑:我只是厌倦了做BoxLayout,我想这似乎很管用。谢谢你的提示。我刚做了BoxLayout,它可以按照我的意愿工作。不过谢谢你。