Java实用经验总结--Swing篇二

转载来源:http://blog.csdn.net/kabini/article/details/1733552

1.   JEditorPane显示细线表格

1.1. 无效的边框设置法

JEditorPaneSwing为我们提供的一个简单的显示格式化页面的组件。它支持HTML语法,能够获取URL连接事件,支持简单的CSS….,我们甚至可以用它来制作一个简单的Web浏览器。但是一如我在上一篇文章中介绍的那样,JEditorPane对于表格边框的处理还是存在一定的问题,即使在html代码里面写入设置边框为1border=1 cellspace=0)所得到的边框十分粗,甚是难看L。

但如果将这个页面导出成HTML文件,再用IE打开,效果就会好很多。

但是别高兴太早,这只是表面现象。我们察看IE的打印预览地时候,就会发现表格的边框依然很粗。

这种程度的表格拿出去会让人笑话的,要不是这个表格过于复杂且人家催的紧,我用JasperReport能弄出比这个漂亮10倍的表格。但是工期不等人,只能另想办法了。于是google了一下,发现了一个比较好的方法。

1.2. 有局限性的背景设置法

这个方法的原理很简单,就是让将表格的背景色设为黑色,然后再令cellspace=1,如此一来表格单元之间的边距就可以当成表格框来用,效果很不错的。

于是满心欢喜,以为这下子可算完事了,但是鬼使神差的我又把这个页面导出成HTML,然后用IE打开,在打印预览下却发现……

边框都消失不见了!!!难道IE打印的时候不显示背景色吗?答案看来是肯定的,连我在表格标题栏上设置的CSS也同样无效,只留下一个蓝色的框,真是无奈啊。于是只能不提供导出成HTML的功能。如果哪位仁兄有更好的解决方案,能让JEditorPane表格显示细线,且在IE打印预览下也能正常显示,请给我留言,感激不尽。

2.   横向打印JEditorPane的显示内容

要想打印JEditorPane的内容很简单,只需要调用JEditorPane.print()就可以了。如果想要调整页眉页脚,边距,打印方向这些细节问题,就需要麻烦一点的步骤。老实说,用JavaAPI来进行打印工作实在是一件很繁琐的工作,而且一个控制不好就会连累整个输出效果。真怀念使用JasperReport的日子啊。

 

不过幸好客户只需要我将程序的打印方向变成“横向打印”,这似乎不太难。我的解决方法如下:

其中的detailInfoTxt就是一个JEditorPane,具体方法是将PrinterJob中的缺省PageFormat的打印方向属性替换成我们想要的打印方向,然后再利用PrinterJob.setPrintable()进行设置就好了。值得注意的是JEditorPane本身并未实现Printable接口,所以我们必须通过JEditorPane.getPrintable()方法来获得一个与某个JEditorPane相对应的该接口的实例。

3.   JTable弹出右键菜单

在我的程序中,用户要求在付款表格的不同月份可以看到详细的付款信息。我曾经想过用JToolTip,但后来觉得它的起始显示时间和显示持续时间不好设定,如果设定不好的话可能会影响用户的使用体验。于是决定让JTable弹出右键菜单的方式来显示所需的内容。

图中可以很清楚地看到我当前选择的行就是当前行,而列是6月份所在的列。然而在JTable上显示弹出菜单的关键问题在于定位。我们需要确定用户右键单击JTable的时候鼠标所在的行列值各是多少。由于JTable并未给我们提供这样的功能,所以我们只能自己根据鼠标当前位置来计算鼠标所在的行列值。在没有任何辅助信息的情况下,还要正确显示鼠标所指向的单元格,可以说这是一件不可能完成的任务。因为每一行的高度和每一列的宽度都可能是不一样的,所以只有假设每一行都有相同高度的情况下我们才能确定是哪一行,同理,只有假设列都有相同宽度,我们才能根据鼠标目前所在的位置来算出鼠标具体正在指向哪一列。在我的程序中,由于列的不是固定的,而行的高度是固定的,所以我只能采用前一种假设来确定用户正在点的是哪一行。很明显,这不能解决列的问题,所以如果谁有好方法可以留言。

我采用了一个不是方法的方法,就是让用户先左键点击所要查看内容的单元格,然后再点右键弹出菜单。通过左键的点击我就可以完整的确定鼠标所指向的单元格,也就可以轻松取得所选单元格力的数据了。这办法虽然不是好办法,但谁让他催得紧呢,所以他也只能忍了J。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值