我有一个为GridLayout中的网格创建元素的类,它基本上由4个拼凑在一起的面板组成。
我希望其中一个面板(包含一个JTextArea)可折叠,因为它相当冗长,而且我不希望它占用如此多的屏幕空间。当然,我遇到了SwingX库,并使用JXCollapsiblePane来做到这一点,即使它按预期工作,只要我点击其中一个上的切换按钮,它似乎一直影响所有其他JXCollapsiblePanes。它实际上并没有打开它们,但它使窗口扩展以容纳空间,就好像它们被打开一样。如果你想要一个更好的描述,我可以拍照,但后来。我该怎么做才不会这样做?我很确定我没有使用任何静态属性,所以我不确定为什么要这样做。
另一方面,如果有人能告诉我这是否是正确的编码风格(我觉得我正在做的事情对于超级嵌套的面板来说效率非常低,对于Swing来说是新的)这样会很好。< / p>
以下是我项目的相关代码段:
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);
}
答案 0 :(得分:1)