2017-08-04 69 views
1

我有一個爲GridLayout中的網格創建元素的類,它基本上由4個拼裝在一起的面板組成。來自SwingX的JXCollapsiblePane正在影響其他類中創建的所有其他窗格

我希望其中一個面板(包含JTextArea)可摺疊,因爲它相當詳細,我不希望它佔用太多的屏幕空間。當然,我遇到了SwingX庫並使用了JXCollapsiblePane來做到這一點,即使它按照預期工作,它似乎仍然會影響所有其他JXCollapsiblePanes,只要我點擊其中一個JXCollapsiblePanel上的切換按鈕。它實際上並沒有打開它們,但是它使得窗口擴展以容納打開的空間。如果您想要更好的描述,我可以拍照,但稍後。我該怎麼做才能做到這一點?我很確定我沒有使用任何靜態屬性,所以我不知道它爲什麼這樣做。

在附註上,如果有人能告訴我這是否是正確的編碼風格(我覺得我正在做的事情對於超級嵌套的面板來說效率很低,對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); 
     } 
+2

[GridLayout](https://docs.oracle.com/javase/7/docs/api/java/awt/GridLayout.html):「**容器被分成相等大小的矩形**」這樣當你改變一個,所有改變相應。 – c0der

+0

啊,這很有道理。有沒有可以做的解決方法?我寧願保持它的外觀,因爲它看起來不錯。也許如果我可以做到這一點,那麼所有的網格都會展開,因爲就目前而言,每個網格元素的大小都會受限於框的外觀,當它展開時,它會調整所有網格框的大小變成相同的大小。編輯:我只是厭倦了BoxLayout,我猜似乎這樣做。謝謝你的提示。 – Chuck67322

回答

1

GridLayout

該容器被分成大小相等的長方形

所以當你換一個,全部相應改變。

如果您需要更多的靈活性(以更復雜的價格),請考慮GridBagLayout

+0

我只是做了BoxLayout,它可以像我想的那樣工作。謝謝,不過。 – Chuck67322