class 中来自 SwingX 的 JXCollapsiblePane 正在影响 class 创建的其他对象中创建的所有其他窗格

JXCollapsiblePane from SwingX in a class is affecting all the other panes created in other objects made by the class

我有一个 class 可以在 GridLayout 中为网格创建元素,它基本上由 4 个面板组成。

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

附带说明一下,如果有人能告诉我这是否是正确的编码风格(我觉得我正在做的事情对于 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);
        }

GridLayout:

The container is divided into equal-sized rectangles

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

如果您需要更大的灵活性(以更复杂的代价),请考虑 GridBagLayout