2016-04-26 66 views
0

我有一個JTabbedPane選項卡內的JScrollPane。在該JScrollPane中,我放置一個JPanel,其背景爲紅色,其大小已明確設置。JScrollPane繪圖組件本身

這就是我得到:

enter image description here

enter image description here

注意,第二圖像,其中容器框架已調整大小時,組件被滾動條元素下繪製

這是怎麼回事?我已經嘗試過所有涉及組件的佈局管理器的每個組合(除了JPanel之外還有其他組件) - 除了在一個大的空白矩形下面,我不能得到任何東西來繪製(是嗎?一個背景,)

代碼:??

在主JFrame的子類:

// Called once on startup/layout. 
public void refreshGUIState() { 
    for (int i = 0; i < client.getFrameStackLength(); i++) { 
     InferenceFrame frame = client.getFrame(i); 
     JScrollPane pane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
              JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     JPanel wtf = new JPanel(); 
     pane.setBackground(Color.YELLOW); 
     wtf.setBackground(Color.red); 
     wtf.setSize(100,100); 
     wtf.setPreferredSize(wtf.getSize()); 
     pane.add(wtf); 
     workspace.addTab(Integer.toString(i), pane); 
    } 
} 

public GuiClient() throws CliException, ParticleSourceException { 
    super("L4 Interactive Prover"); 
    setSize(800,600); 

    mainArea = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true); 
    mainArea.setDividerSize(2); 
    mainArea.setBackground(Color.DARK_GRAY); 
    getContentPane().add(mainArea); 

    /* ... menu bar init ... */ 

    toolspace = new JPanel(); 
    workspace = new JTabbedPane(); 
    mainArea.add(toolspace); 
    mainArea.add(workspace); 

    this.validate(); 
    refreshGUIState(); 
} 

編輯:懷疑JScrollPane的不知何故沒有建立視加入了第一個孩子的時候,下如預期,我也嘗試了三個參數的構造函數。同樣的行爲。

重新編輯:除了我犯了錯誤並留在add()調用中。哎呦。看起來就是這樣。

+0

我的猜測是你忘了把東西添加到滾動窗格中。 – Laurel

+0

我在「pane.add(wtf);」的行上這樣做。代碼就在那裏......你可以看到它在圖像中繪製,它只是在一個灰色的矩形下面。所以......。 – BadZen

+0

你在哪裏設置框架可見? – Laurel

回答

4

而不是

pane.add(wtf); 

你需要

pane.setViewportView(wtf); 

你也可以做到這一點初始化JScrollPane的時候:

JScrollPane pane = new JScrollPane(wtf); 

或者,你的情況:

JScollPane pane = new JScrollPane(wtf, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);