繁体   English   中英

JTable单元中的可滚动JPanel

[英]Scrollable JPanel in JTable cell

我想在JTable中创建自定义单元格。 我使用了自定义渲染器并返回了JPanel对象。 它有效,但是有一个问题。 程序运行时,JPanel使用paintComponent()方法自行绘制。 在每个“滴答”(通常每100ms)上,面板会变宽(我正在m drawing kind of graph) and when it becomes too big the rest is just hidden. I m drawing kind of graph) and when it becomes too big the rest is just hidden. I希望它调整大小并创建滚动条。 我尝试了几种放置ScrollPane的方法,但没有一种起作用。 基本上,我想要类似Java VisualVM中的“线程”视图的东西。 有任何想法吗?

将滚动窗格放置在普通表单元格中是困难的,因为只有一个组件用于呈现表中的所有单元格。 可以删除JTable并仅将大型组件集放在具有网格布局的普通JPanel中吗?

如果仍然要使用JTable:

每个滚动窗格都包含特殊的JViewport控件。 这个JViewport控件实际上完成所有滚动工作,而JSrollPane本身仅使用滚动条对其进行布局。 因为单个视口用于所有单元格,所以您必须将该视口滚动位置存储在某个位置,并为每个绘画单元恢复它(在getCellRenderer方法上)。 但是JSrollPane需要繁重的布局工作,因此这种解决方案非常慢。

可能是最可取的解决方案:重写JPane单元渲染器的绘制方法,并且此绘制方法必须创建具有适当滚动偏移量的子图形(Graphics.create())。 滚动偏移数据必须存储在某个地方(例如,在表模型中)。 当用户单击单元格时,JTable将开始单元格编辑,然后安装单元格编辑器。 这必须是特殊的单元格编辑器,其中包含滚动窗格本身。 用户滚动此控件(不需要任何特殊支持),然后完成单元格编辑,您必须将滚动位置保存到模型中(在stopCellEditing()函数中)。 然后单元格渲染的绘画本身和绘画方法中的内容滚动偏离模型。 用户看到滚动的单元格。 您还可以将JScrollBar放在渲染的单元格内,以便用户可以看到滚动位置(但需要特殊的支持)。 您还可以使用JViewport本身来完成所有繁琐的工作,但在控制上却难以理解。 我看不到在单元格编辑器中使用滚动裤的任何麻烦,因此它必须可以工作。 无论如何,这是一项巨大的工作。

因此,您已经设置了自定义表格单元格渲染器,并且我假设此渲染器是JPanel上的JScrollPane视图。 您可能需要玩弄调用setPreferredSize()滚动窗格和调用setPreferredSize()和/或setSize()在面板上(或其他内部元件被滚动窗格查看)之前调用validate()来触发布局更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM