2017-10-12 76 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的副本,它墙根背后的真正的除头并应用于一个布尔值,每一个功能,以避免重复行动。 它的工作,但它很难调试,因为一些功能是强制性的。

由于不必要的双重加载优化问题,我仍然在寻找更好的答案,但至少现在它可以工作!

相关问题