关于JSplitPane在setDividerLocation(int)之后,折叠时大小变化的问题
2011-07-28 10:02
309 查看
这几天在所Swing开发,遇到一个很奇怪的事情,在做的产品中,有一个在JFrame中折叠查询条件和结果的功能要实现,于是自然而然地用到JSplitPane,按照资料中写的那样,在setDividerLocation(150)之后,初始化时,分隔的位置是没问题的,但是在折叠查寻条件完再展开时,发现分隔的那个条位置网上挪了一点,Debug发现JSplitPane.getDividerLocation()的值变为了134。虽然不影响产品的使用,但是总觉得不爽。
由于产品根据传参分两种查询,一种是传统的按查询条件,另一种是按照预先配好的查询条件,在上面一项项列出来,由用户自行勾选相应的项去查询。传统方式的没有这个问题,只有用户自行勾选的那种方式存在问题,最诡异的是两种查询,在初始化时JSplitPane的代码都是一样的。
这个问题我在百度和Google上查到了夜里两点,一直没有一个明确地解释,今天早上来到单位,拿着Swing的书专门地看了下这个,发现有一个“最小尺寸和首选尺寸”的说明,这里面虽然没有明确解释了我所遇到的问题,但是给我指明了一下方向。
Debug时我把JSplitPane上半部分的的height打了出来,发现两种查询方式,初始值都是149(收起后高度是1),但是折叠展开之后,一个还是149,另一个变成了134,于是我把上半部分的大小做了一个限定,于是问题解决了。不过我还是不太清楚JSplitPane具体是怎么来做的,为什么在setDividerLocation(150)之后,还要根据我JPanel的大小来调整dividerLocation,看来等忙完这阵子还需要好好看看这个问题。
由于产品根据传参分两种查询,一种是传统的按查询条件,另一种是按照预先配好的查询条件,在上面一项项列出来,由用户自行勾选相应的项去查询。传统方式的没有这个问题,只有用户自行勾选的那种方式存在问题,最诡异的是两种查询,在初始化时JSplitPane的代码都是一样的。
这个问题我在百度和Google上查到了夜里两点,一直没有一个明确地解释,今天早上来到单位,拿着Swing的书专门地看了下这个,发现有一个“最小尺寸和首选尺寸”的说明,这里面虽然没有明确解释了我所遇到的问题,但是给我指明了一下方向。
Debug时我把JSplitPane上半部分的的height打了出来,发现两种查询方式,初始值都是149(收起后高度是1),但是折叠展开之后,一个还是149,另一个变成了134,于是我把上半部分的大小做了一个限定,于是问题解决了。不过我还是不太清楚JSplitPane具体是怎么来做的,为什么在setDividerLocation(150)之后,还要根据我JPanel的大小来调整dividerLocation,看来等忙完这阵子还需要好好看看这个问题。
contentPane = (JPanel)this.getContentPane(); contentPane.setLayout(new BorderLayout()); this.setContentPane(contentPane); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setSize(new Dimension(screenSize.width, screenSize.height-55)); this.setExtendedState(Frame.MAXIMIZED_BOTH); queryPane.setLayout(new XYLayout()); tablePane.setLayout(new XYLayout()); queryPane.setMinimumSize(new Dimension(screenSize.width, 149)); // 加上这句就好了 jSplitPane1.add(queryPane,JSplitPane.TOP); jSplitPane1.add(tablePane,JSplitPane.BOTTOM); this.getContentPane().add(jSplitPane1, BorderLayout.CENTER); jSplitPane1.setOrientation(JSplitPane.VERTICAL_SPLIT); jSplitPane1.setOneTouchExpandable(true); jSplitPane1.setDividerLocation(150); jSplitPane1.setContinuousLayout(true); jSplitPane1.setEnabled(false); int bottomYGap = screenSize.height-150-112;//下方表格的高度
相关文章推荐
- 关于TextView.setTextColor(int); 括号里那个颜色int值的问题
- 关于sizeof与#pragma pack导致结构体大小变化的问题
- 关于将html页面转成jsp页面之后样式变化的问题
- SSH+Oracle整个问题9 关于BigDecimal 和Int整数比较大小的问题
- 解决JSplitPane setDividerLocation方法无效的问题
- linux mint:关于解决安装中文输入法之后字体变化的问题
- 关于用MySQL的ER模型设计出来的之后的sql文件无法导入问题[Err] 1115 - Unknown character set: 'utf8'
- [C++] 关于FD_SETSIZE大小的问题
- 关于sqlite删除数据之后大小没变化
- 关于TextView.setTextColor(int); 括号里那个颜色int值的问题
- 关于将html页面转成jsp页面之后样式变化的问题
- 【转】关于int范围中负数最小值的绝对值比整数最大值大初学C,问题源自:为什么C中的int类型(16位)的下溢下限为-32768而上溢上限却是32767。 首先说吧,32767很容易理解,32767
- 关于Mysql INT类型最大值问题
- 关于textarea在safari chrome下可拖动大小的问题
- 关于如何监听div大小的变化,jquery扩展函数
- 关于Sql Server中字符串比较大小写敏感的问题
- 关于UpdatePanel回传之后JS失效问题
- 关于更换百度地图默认位置之后如果出现还是先出现北京然后再是当前的地址的问题解决办法
- 关于集合的再补充,Set集合的唯一性,与集合的null值null键问题
- STL中关于map和set的四个问题?