如何在Java中的JScrollPane中滚动时保持JPanel的固定?

时间:2017-10-12 11:50:08

标签: java swing jscrollpane

我是一名Java初学者(1个月的经历),但到目前为止还喜欢它! 我需要在我没有创建的Planning应用程序上实现一个功能,我需要使包含日期的面板在滚动时保持固定(类似Excel的标题)。

在搜索答案时,我主要使用JTable查找方法,但问题是我只使用JPanelMainPanel,其中JPanel包含在WindowPanel中{1}} JPanelTopPanelJPanel)(未在已修复的图片中显示)。 我使用的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);

但是标题保持蓝色并且Days Header没有固定,它正好在标题下方,但其他所有内容都正常加载,包括滚动条(不相关,所以不在图片中)。 有关信息,下面的面板由名为cellPanels的customPanel组成:

Result Screenshot 2

Result Screenshot 2

我认为我接近了我的目标,但我测试了很多东西而没有完全奏效。 我正在寻找有人向我解释我做错了什么并帮助我解决问题。

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

我找到了一个可接受的解决方案,

我加载了我的MainPanel的副本并将其隐藏在除了标题之外的真实文件后面,并为每个功能应用了一个布尔值以防止双重操作。 它工作正常,但调试非常困难,因为某些功能是强制性的。

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