簡體   English   中英

Java UI:在調整大小時設置擺動組件行為

[英]Java UI: set swing components behavior on resize

我很難正確設置我的揮桿組件在調整大小時的行為方式。

該接口存在兩個問題: 預期

答:每行開頭的切換按鈕用於折疊/展開文本。 所有元素都包含在JLayeredPane中。 在按鈕上單擊,我編輯窗格的高度以展開或折疊內容(31或310)。 Expand效果很好,可將以下元素推入。 另一方面, collapse確實會隱藏文本,但會將所有元素保留在適當的位置。 這是我的代碼:

private void expandText(java.awt.event.ActionEvent evt) {
    JToggleButton button = (JToggleButton) evt.getSource();
    Container parent = button.getParent();
    Dimension size = parent.getSize();
    String icon;

    if (button.isSelected()) {
        size.height = 310;
        icon = "/org/cytoscape/ocsana/resources/images/minus.png";
    } else {
        size.height = 31;
        icon = "/org/cytoscape/ocsana/resources/images/plus.png";
    }

    parent.setSize(size);
    try {
        button.setIcon(new ImageIcon(ImageIO.read(getClass().getResource(icon)).getScaledInstance(-1, 15, Image.SCALE_SMOOTH)));
    } catch (IOException ex) {
    }

    backgroundPane.revalidate();
    backgroundPane.repaint();
}

B:上面的截圖是窗口的最小尺寸。 當我水平調整窗口大小時,內部窗格僅將大小調整為min + (frame.width - min) / 2的值,這意味着我的右滾動條不粘在框架的右側。

參見下面兩個問題的演示: 結果

您的展開/折疊代碼如何工作? 您只是使組件可見/不可見,還是從面板中添加刪除組件?

另一方面,折疊確實會隱藏文本,但會將所有元素保留在適當的位置。

如果添加/刪除組件,則基本代碼為:

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();

表示我的右側滾動條不粘在框架的右側。

這取決於您使用的布局管理器。 我想最簡單的方法是使用GrigBagLayout。 它允許您“填充”可用空間。 閱讀Swing教程中有關如何使用GridBagLayout的部分, 獲取更多信息和示例。

所有元素都包含在JLayeredPane中。

不知道為什么要使用分層窗格。 默認情況下,分層窗格不使用布局管理器。

好吧,您可以在框架中添加一個偵聽器,以便在調整框架大小時對事件進行操作。 然后打包()框架。

public final class TestFrame extends JFrame {

(...)

    this.getRootPane().addComponentListener(new ComponentAdapter() {
        public void componentResized(ComponentEvent e) {

             this.pack();
             this.revalidate();

        }
    });

}

如果您使用的是繪制圖形方法,則還應該重新繪制框架。

在該方法中,您還可以通過基於e.getWidth()進行計算來設置窗口的首選大小

根據camickr的回答和評論,看看我是如何解決的:


點A是由於我在NetBeans中使用了自由布局。 我沒有成功修復代碼,因此更改了元素的結構。 它可能不是最佳的,並且沒有正確使用所有的揮桿概念,但是可以按照我想要的方式工作。

我在后台使用GridBagLayoutJLayeredPane 此背景窗格包含一列高度為30和260的JPanel ,一列為摘要行 ,另一列為詳細信息

在此處輸入圖片說明

JToggleButton控制的展開/折疊功能通過隱藏以下面板下面的面板belowPanel.setVisibility(false) 不需要重新包裝或其他任何東西。 這是不更改按鈕圖標的代碼的樣子:

private void inverseVisibility(JToggleButton expand, JPanel target) {
    if (expand.isSelected()) {
        target.setVisible(true);
    } else {
        target.setVisible(false);
    }
}

因為我只希望元素水平調整大小,所以我所有面板的“ Horizontal為“ Fill值,“ Northwest為“ Anchor 我將weightX = 1; weightY = 0設置為weightX = 1; weightY = 0 weightX = 1; weightY = 0 最后,我在底部添加了一個帶有Southwest錨的面板,並將兩個權重both填充為1 (不確定它是否會改變任何東西,但是通過這種方式,我確定它將填充窗口調整大小時底部的所有空白。大於其內容的大小)。


通過將適合我Frame背景面板放入JScrollPane ,解決了B點的問題。 我的錯誤是由於Netbeans編輯器沒有正確地將滾動窗格粘貼到框架的側面,這是由於框架和滾動窗格中定義的大小不一致。 如果您正在使用此工具,我的建議是設置盡可能少的值,因為gui設計器會大量互連很多值。

獲取完整的代碼 (95,864字節)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM