我是一名Java初学者(1个月的经历),但到目前为止还喜欢它! 我需要在我没有创建的Planning应用程序上实现一个功能,我需要使包含日期的面板在滚动时保持固定(类似Excel的标题)。
在搜索答案时,我主要使用JTable
查找方法,但问题是我只使用JPanel
或MainPanel
,其中JPanel
包含在WindowPanel
中{1}} JPanel
与TopPanel
(JPanel
)(未在已修复的图片中显示)。
我使用的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
)只保持蓝色。
实际上,代替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组成:
我认为我接近了我的目标,但我测试了很多东西而没有完全奏效。 我正在寻找有人向我解释我做错了什么并帮助我解决问题。
谢谢你的时间!
答案 0 :(得分:0)
我找到了一个可接受的解决方案,
我加载了我的MainPanel的副本并将其隐藏在除了标题之外的真实文件后面,并为每个功能应用了一个布尔值以防止双重操作。 它工作正常,但调试非常困难,因为某些功能是强制性的。
由于不必要的双重加载优化问题,我仍然在寻找更好的答案,但至少它现在可以正常工作!