JScrollPane问题(回答马山给分)

zhanghw_1229 2009-10-13 11:55:29
JScrollPane包含了jtable,jtable一共50行,默认显示26行,超过26行需要拉滚动条。
现在需要做的是 添加了两个统计行(要求和上面jtable的格式对齐),这两个统计行在jtable的下面,如果在上面的话,可以考虑用setColumnHeaderView来实现。

在下面的话,就比较麻烦,因为上面jtable的宽度变时,下面统计行也要跟着变。


请问有什么办法能够实现上面的效果。
...全文
226 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanghw_1229 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 laynepeng 的回复:]
引用 17 楼 zhanghw_1229 的回复:
引用 15 楼 laynepeng 的回复:
引用 14 楼 zhanghw_1229 的回复:
JViewport如何实现,能说清楚点吗,谢谢。


那我还是推荐你用JIDE吧。与其问别人要代码,还不如用现成的。

引用
如果你想更省事一点,可以直接用com.jidesoft.grid.TableScrollPane(http://www.jidesoft.com/javadoc/com/jidesoft/grid/TableScrollPane.html),
它的JIDE Common Layer是免费和开源的,下载地址:

https://jide-oss.dev.java.net/servlets/ProjectDocumentList?folderID=11599&expandFolder=11599&folderID=0


下载下来不包含com.jidesoft.grid.TableScrollPane啊。TableScrollPane是开源免费的吗

我错了,不好意思,这个不是在common layer里面的,是再封装一层的。

请使用JideScrollPane来代替你原来的JScrollPane。

里面有这个方法,

public void setColumnFooterView(Component view)

和你已经知道的JScrollPane里的setColumnHeaderView一样的。
[/Quote]
好的,用这个组件应该可以解决。
非常感谢。
laynepeng 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 zhanghw_1229 的回复:]
引用 15 楼 laynepeng 的回复:
引用 14 楼 zhanghw_1229 的回复:
JViewport如何实现,能说清楚点吗,谢谢。


那我还是推荐你用JIDE吧。与其问别人要代码,还不如用现成的。

引用
如果你想更省事一点,可以直接用com.jidesoft.grid.TableScrollPane(http://www.jidesoft.com/javadoc/com/jidesoft/grid/TableScrollPane.html),
它的JIDE Common Layer是免费和开源的,下载地址:

https://jide-oss.dev.java.net/servlets/ProjectDocumentList?folderID=11599&expandFolder=11599&folderID=0



下载下来不包含com.jidesoft.grid.TableScrollPane啊。TableScrollPane是开源免费的吗
[/Quote]
我错了,不好意思,这个不是在common layer里面的,是再封装一层的。

请使用JideScrollPane来代替你原来的JScrollPane。

里面有这个方法,

public void setColumnFooterView(Component view)

和你已经知道的JScrollPane里的setColumnHeaderView一样的。
djt_1982 2009-10-14
  • 打赏
  • 举报
回复
在jtable底下加JLabel,然后监听jtable列宽改变吧!
jtable列宽改变时调整JLabel大小和位置。
TableColumn.addPropertyChangeListener应该可以监听到列头宽度变化
zhanghw_1229 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 laynepeng 的回复:]
引用 14 楼 zhanghw_1229 的回复:
JViewport如何实现,能说清楚点吗,谢谢。


那我还是推荐你用JIDE吧。与其问别人要代码,还不如用现成的。

引用
如果你想更省事一点,可以直接用com.jidesoft.grid.TableScrollPane(http://www.jidesoft.com/javadoc/com/jidesoft/grid/TableScrollPane.html),
它的JIDE Common Layer是免费和开源的,下载地址:

https://jide-oss.dev.java.net/servlets/ProjectDocumentList?folderID=11599&expandFolder=11599&folderID=0

[/Quote]

下载下来不包含com.jidesoft.grid.TableScrollPane啊。TableScrollPane是开源免费的吗
ZX_ARES 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 a276202460 的回复:]
引用 5 楼 zx_ares 的回复:
可以这样
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
这样表格的宽度就不会变了......

API有告诉你说始终显示垂直方向的滚动条table的column的宽度就不会变吗?
table.getTableHeader().setResizingAllowed(false);才可以保证 table的没列的宽度值不变。
这样设置的好处坏处可想而知如果某个单元格内有很多的内容 而且没有textarea作为editor进行双击显示的话 那么看不到的信息从哪里看呢?
[/Quote]

我还以为是表的宽度呢...........-_-!
laynepeng 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zhanghw_1229 的回复:]
JViewport如何实现,能说清楚点吗,谢谢。
[/Quote]

那我还是推荐你用JIDE吧。与其问别人要代码,还不如用现成的。

[Quote]
如果你想更省事一点,可以直接用com.jidesoft.grid.TableScrollPane(http://www.jidesoft.com/javadoc/com/jidesoft/grid/TableScrollPane.html),
它的JIDE Common Layer是免费和开源的,下载地址:

https://jide-oss.dev.java.net/servlets/ProjectDocumentList?folderID=11599&expandFolder=11599&folderID=0
[/Quote]
laynepeng 2009-10-14
  • 打赏
  • 举报
回复
呃,对的。这个是和你开始说的JScrollPane的setColumnHeaderView完全一样的,当然没有联动,所以我一开始才推荐你用TableScrollPane。


这个组件是收费的,

http://www.jidesoft.com/products/grids.htm

TableScrollPane - built on top of JideScrollPane to support table row headers, row footers and column footers using a single table model


实现联动的方法也很简单,思路大概就是你说的那样。TableColumnModelListener的columnMarginChanged就好了,很简单。
zhanghw_1229 2009-10-14
  • 打赏
  • 举报
回复
用JideScrollPane后,基本效果出来了,但是
上面jtable的宽度变时,下面统计行的宽度没有发生变化。

想问下是 得监听上面jtable改变列宽的事件,还是哪些属性没有配置到位。

我是这么做的 JideScrollPane里套了jtable1,然后setColumnFooterView里放了一个jpane,jpane里套了一个Jtable,这个Jtable显示的就是统计行的内容。

希望能解答下,感激不尽。
zhanghw_1229 2009-10-13
  • 打赏
  • 举报
回复
JViewport如何实现,能说清楚点吗,谢谢。
laynepeng 2009-10-13
  • 打赏
  • 举报
回复
你去看看JScrollPane的怎么实现就好了,很容易阿,无非是加个JViewport罢了。。。

如果你想更省事一点,可以直接用com.jidesoft.grid.TableScrollPane(http://www.jidesoft.com/javadoc/com/jidesoft/grid/TableScrollPane.html),
它的JIDE Common Layer是免费和开源的,下载地址:

https://jide-oss.dev.java.net/servlets/ProjectDocumentList?folderID=11599&expandFolder=11599&folderID=0
zhanghw_1229 2009-10-13
  • 打赏
  • 举报
回复
好有没有什么好的解决办法
zhuzeitou 2009-10-13
  • 打赏
  • 举报
回复
信息过长的话,可以利用renderer实现tooltip来显示内容吧
一洽客服系统 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zx_ares 的回复:]
可以这样
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
这样表格的宽度就不会变了......
[/Quote]
API有告诉你说始终显示垂直方向的滚动条table的column的宽度就不会变吗?
table.getTableHeader().setResizingAllowed(false);才可以保证 table的没列的宽度值不变。
这样设置的好处坏处可想而知如果某个单元格内有很多的内容 而且没有textarea作为editor进行双击显示的话 那么看不到的信息从哪里看呢?
zhuzeitou 2009-10-13
  • 打赏
  • 举报
回复
http://www.crionics.com/products/opensource/faq/swing_ex/src/examples/FixedRowExample.java

这个可以作为参考,是利用两个jscrollpane,两个jtable做的,如果把上下两个jscrollpane都做setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS)设定的话就可以了
zhanghw_1229 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 littlemonster 的回复:]
顶~ 要是我,我也这么弄。。。

引用 5 楼 zx_ares 的回复:
可以这样
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
这样表格的宽度就不会变了......

[/Quote]
用这样的方法的话,统计行应该也在滚动条之内吧
littlemonster 2009-10-13
  • 打赏
  • 举报
回复
顶~ 要是我,我也这么弄。。。

[Quote=引用 5 楼 zx_ares 的回复:]
可以这样
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
这样表格的宽度就不会变了......
[/Quote]
zhanghw_1229 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 a276202460 的回复:]
引用 3 楼 chosen0ne 的回复:
我觉得自己实现TableModel比较好,在getValue(int r,int c)方法中进行判断,如果r是最后两行,就返回对应的统计行的数据。
还可以通过实现TableCellRenderer,来使统计行与一般行显示上的不同,比如单元格的颜色不同。

tablemodel,cellrenderer不重写UI你能把 固定的统计信息一直显示在 table的下方吗 而且统计信息应该是在滚动条外面 一致显示的 不是随便的追加两行就可以了  如果是 还用什么render只是addrow添加两行就OK了
[/Quote]

恩,统计信息是在滚动条外面,而且要求一直显示。
ZX_ARES 2009-10-13
  • 打赏
  • 举报
回复
可以这样
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
这样表格的宽度就不会变了......
一洽客服系统 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chosen0ne 的回复:]
我觉得自己实现TableModel比较好,在getValue(int r,int c)方法中进行判断,如果r是最后两行,就返回对应的统计行的数据。
还可以通过实现TableCellRenderer,来使统计行与一般行显示上的不同,比如单元格的颜色不同。
[/Quote]
tablemodel,cellrenderer不重写UI你能把 固定的统计信息一直显示在 table的下方吗 而且统计信息应该是在滚动条外面 一致显示的 不是随便的追加两行就可以了 如果是 还用什么render只是addrow添加两行就OK了
chosen0ne 2009-10-13
  • 打赏
  • 举报
回复
我觉得自己实现TableModel比较好,在getValue(int r,int c)方法中进行判断,如果r是最后两行,就返回对应的统计行的数据。
还可以通过实现TableCellRenderer,来使统计行与一般行显示上的不同,比如单元格的颜色不同。
加载更多回复(2)
一个JAVA的学生资源管理系统 public class cxxj extends JFrame { Statement ps; ResultSet rs; Connection con; String url; JScrollPane jScrollPane1 = new JScrollPane(); Object[][] rowData = new Object[10][9]; String[] columnNames = { "学号", "姓名", "性别", "出生日期", "班号", "联系电话", "入校日期", "家庭住址", "备注"}; JTable jTable1 = new JTable(rowData, columnNames); JButton cancel = new JButton(); JButton ok = new JButton(); JTextField input = new JTextField(); ButtonGroup buttonGroup2 = new ButtonGroup(); JRadioButton xh = new JRadioButton(); JRadioButton xm = new JRadioButton(); JRadioButton bh = new JRadioButton(); public cxxj() { try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { cxxj cxxj = new cxxj(); } private void jbInit() throws Exception { this.setLocale(java.util.Locale.getDefault()); this.getContentPane().setLayout(null); jScrollPane1.setBounds(new Rectangle(6, 0, 780, 400)); ok.setToolTipText("直接点击确定,可查询全部学生信息"); cancel.setBounds(new Rectangle(578, 412, 85, 30)); cancel.setFont(new java.awt.Font("Dialog", 0, 15)); cancel.setText("取 消"); cancel.addActionListener(new cxxj_cancel_actionAdapter(this)); ok.setBounds(new Rectangle(465, 412, 85, 34)); ok.setFont(new java.awt.Font("Dialog", 0, 15)); ok.setText("确 定"); ok.addActionListener(new cxxj_ok_actionAdapter(this)); input.setFont(new java.awt.Font("Dialog", 0, 15)); input.setText(""); input.setBounds(new Rectangle(291, 410, 124, 31)); xh.setFont(new java.awt.Font("Dialog", 0, 15)); xh.setRolloverEnabled(false); xh.setText("按学号"); xh.setBounds(new Rectangle(20, 417, 74, 34)); xm.setBounds(new Rectangle(95, 417, 74, 34)); xm.setText("按姓名"); xm.setRolloverEnabled(false); xm.setFont(new java.awt.Font("Dialog", 0, 15)); bh.setBounds(new Rectangle(174, 418, 74, 34)); bh.setText("按班号"); bh.setRolloverEnabled(false); bh.setFont(new java.awt.Font("Dialog", 0, 15)); this.getContentPane().add(jScrollPane1, null);

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧