簡體   English   中英

以GridBoxLayout為中心的JPanel反復添加了JPanel

[英]Centering JPanel with GridBoxLayout is repeatedly adding the JPanel

經過大量研究后,我似乎找不到任何問題。 我正在創建一個程序,用戶可以在其中選擇他們想使用的標簽(JTabbedPane)。 在該選項卡中,當用戶選擇選項卡時,我將其添加到該選項卡中。

private void tabEventsStateChanged(javax.swing.event.ChangeEvent evt) {                                       
    if (tabEvents.getSelectedComponent().equals(tabAddEvent)) {
        JPanel jp = new AddEvent();
        tabAddEvent.setLayout(new GridBagLayout());
        tabAddEvent.add(jp);
        tabAddEvent.updateUI();
    }
    else if (tabEvents.getSelectedComponent().equals(tabEditEvent)) {
        JPanel jp = new EditEvent();
        tabEditEvent.setLayout(new GridBagLayout());
        tabEditEvent.add(jp);
        tabEditEvent.updateUI();
    }
else if (tabEvents.getSelectedComponent().equals(tabDeleteEvent)) {
        JPanel jp = new DeleteEvent();
        tabDeleteEvent.setLayout(new GridBagLayout());
        tabDeleteEvent.add(jp);
        tabDeleteEvent.updateUI();
    }
else {
    System.out.println("Error! Tab Not Selected!");
}
}

JPanels完美居中。 但是,我很沮喪地發現,當我在tabAddEvent之后單擊tabEditEvent(或tabDeleteEvent),然后又回到tabAddEvent時,JPanel又被添加了。 這將創建一個怪異的UI,其中我有2個相同的表單並排放置,而不再位於中心... tabEditEvent和tabDeleteEvent也是如此。 如果我單擊任意選項卡3次,則將3個JPanels添加到容器中,依此類推...

更新資料

這是我朋友程序中原始代碼的一部分:

else if (tabEvents.getSelectedComponent().equals(tabEditEvent)) {
        JPanel jp = new EditEvent();
        tabEditEvent.setLayout(new BorderLayout());
        tabEditEvent.add(jp, BorderLayout.CENTER);
        tabEditEvent.updateUI();
    }

更新2

為了解決這個問題,我采取了截屏的方法,以截取屏幕截圖,以便您了解我要描述的內容。 https://www.dropbox.com/s/isj5iezwcak1bfn/Untitled-1.png
https://www.dropbox.com/s/rywe1e5hgx7c88x/Untitled-2.png

我嘗試調查CardLayout,但不幸的是,我無法將其包圍

public void updateUI()
Resets the UI property with a value from the current look and feel.
Overrides:
updateUI in class JComponent
See Also:
JComponent.updateUI()

  1. 使用CardLayout代替添加/刪除JComponents

  2. 調用代碼行tabDeleteEvent.revalidate(); tabDeleteEvent.repaint(); 在必須重復添加/刪除JComponents的情況下完成對已經可見的Swing GUI的所有更改之后

我認為重復的原因是您每次都添加新面板。 將面板添加到該類的構造函數中,然后在上面的代碼中的各個選項卡之間導航。

一位朋友幫忙,告訴我使用布爾if語句來確定我是否已經添加了面板

if (tabEvents.getSelectedComponent().equals(tabAddEvent)) {
        JPanel jp = new AddEvent();
    if (initializedAdd == false) {
    tabAddEvent.setLayout(new GridBagLayout());
    tabAddEvent.add(jp);
    initializedAdd = true;
    }
    }

做得很好! 一旦完成該項目,我將更仔細地查看所有布局!

感謝大家的幫助。

暫無
暫無

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

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