2017-10-12 131 views
0

我是Java初學者(1個月的經驗),但喜歡它到目前爲止!
我需要在Planning應用程序上實現一個我沒有創建的功能,我需要使面板包含幾天在滾動時保持固定(類似Excel的標題)。如何在Java中的JScrollPane中滾動時保持JPanel固定?

在尋找答案,我主要是覺得用JTable方法,但問題是,我只跟01​​(JPanel)(圖中未顯示使用JPanelMainPanel,延伸JPanel,包含在WindowPanelJPanel)的已經固定)。 我使用的是setColumnHeaderView()方法,它似乎是唯一顯示結果的方法。

//MainWindow 
    MainPanel mainPanel = new MainPanel(model); 
    mainPanel.init(); //fill the mainPanel 
    windowPanel.add(mainPanel); 

    JViewport blabla = new JViewport(); 
    blabla.setPreferredSize(mainPanel.getPreferredSize()); 
    blabla.setView(mainPanel); 
    //JViewport blabla2 = new JViewport(); 
    //blabla2.setPreferredSize(windowPanel.getPreferredSize()); 

    scroll = new JScrollPane(windowPanel); 
    scroll.setColumnHeaderView(blabla); 


    getContentPane().add(scroll); 
    this.addMouseListener(new FocusSetterListener()); 

    this.pack(); 
    this.setVisible(true); 

使用這種方法,我得到正確的頭,但沒有滾動條,而下方的面板(這裏的WindowPanel)停留只是藍色。

ResultScreenshot1

實際上,在地方WindowPanel的我需要顯示填充MainPanel,這是工作,當我做到這一點:

 //MainWindow 
    MainPanel mainPanel = new MainPanel(model); 
    mainPanel.init(); //fill the mainPanel 
    windowPanel.add(mainPanel); 

    JViewport blabla = new JViewport(); 
    blabla.setPreferredSize(mainPanel.getPreferredSize()); 
    blabla.setView(mainPanel); 

    scroll = new JScrollPane(mainPanel); 
    scroll.setColumnHeaderView(blabla); 

    getContentPane().add(scroll); 
    this.addMouseListener(new FocusSetterListener()); 

    this.pack(); 
    this.setVisible(true); 

但頭部保持藍色,天頭不固定,它只是低於標題,但其他一切都加載罰款,包括滾動條(不相關,所以不在圖片)。 有關信息,下面的面板被稱爲customPanels的cellPanels形成:

Result Screenshot 2

Result Screenshot 2

我想我接近我的目標,但我測試了很多東西並沒有什麼充分的工作。 我在找人解釋我做錯了什麼,並幫我解決它。

謝謝你的時間!

回答

0

我找到可接受的解決方案,

我裝我的mainPanel的副本,它牆根背後的真正的除頭並應用於一個布爾值,每一個功能,以避免重複行動。 它的工作,但它很難調試,因爲一些功能是強制性的。

由於不必要的雙重加載優化問題,我仍然在尋找更好的答案,但至少現在它可以工作!