2014-11-22 97 views
0

之間切換更新Jbutton將所以我遇到的問題是可能比較容易在畫面顯示:問題與JTabbedPane的標籤

這第一張圖片是遊戲板 enter image description here

的鏡頭每個那些平方 - '陰謀' - 是JButtons。

在點擊圖上顯示上述這些Jbutton之一 - 即,「買生產」 - 相關動作將會發生:

enter image description here

到目前爲止,一切都很好。

但是,在切換到任何其他選項卡 - 「商品」或「幫助」 - 和切換回「遊戲」選項卡上,我只去過能夠有這種情況發生:

enter image description here

我的想法是,我要帶去更新購買農產品後,圖上顯示的步驟應該可以正常更新切換標籤後顯示,但事實並非如此。

這裏是我用來更新顯示購買農產品時的代碼:

buyProduce.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent arg0) { 
      try { 
       buyProduce(); 
       plot_panel.removeAll(); 
       createPlots(); 
       labelStore.get("Cash_Label").setText(game.roundedWorth()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (BankruptException e) { 
       JOptionPane.showMessageDialog(frame, 
         "Bankrupt after attempt to purchase Produce"); 
      } 
     } 
    }); 

我試着在TabbedPane的一個ChangeListener這樣做,只有有繪圖顯示去「空白」像第三張照片。通過顯示上述的按鈕中的一個 - - 用於更新顯示的動作

tabbedPane.addChangeListener(new ChangeListener() { 
     @Override 
     public void stateChanged(ChangeEvent arg0) { 
      plot_panel.removeAll(); 
      createPlots(); 
     } 

    }); 

然而,直到我執行顯示只是「空白」是這樣的。

(如果,例如,當顯示爲「空白」我「買農產品」,一切都顯得理所應當。)

任何人可以在這裏告訴,從我張貼,什麼錯誤和哪裏?

我很高興地後,如果需要更多的代碼,但認爲我應該嘗試保持這個整齊越好。

在此先感謝, 道格。

編輯:我不想浪費人們時間與一個可憐的MCVE,所以這裏 - http://1drv.ms/1Hx5sA1 - 是一個鏈接到一個壓縮的文件夾與其中的所有東西。

如果人們不希望通過拖網,然後我會嘗試切換到一個JTable。

+2

您應該'重新驗證()'和'重繪()'添加或者刪除組件後'plot_panel'。但我幾乎想說,也許我們應該尋找一種不同的設計,但是沒有足夠的信息去解決。 – 2014-11-22 02:18:43

+0

剛試過plot_panel.removeAll之後插入plot_panel.revalidate()和plot_panel.repaint()();和createPlots()之後; (然後兩者)但沒有改變。如果我貼我的(相當大)級在OP,或somehwere外部樣引擎收錄? – 2014-11-22 02:30:24

+0

要獲得更好的幫助,請發佈[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。它只是一些小代碼而已。 – 2014-11-22 02:31:22

回答

0

從plot_panel刪除並重新創建時,調用

plot_panel.updateUI(); 
+2

'updateUI'可能是你可以使用的最差的方法,並且與使UI更新其佈局以及使得組件重新加載它的外觀和感覺狀態無關,這是非常低效的。作爲@peeskillet的狀態,OP可能需要調用'revalidate'然後再'repaint' – MadProgrammer 2014-11-22 03:28:31