JSplitPane setOneTouchExpandable 点击小三角进行隐藏时监听的事件 ?

realreachard 2009-12-03 02:51:09
如题
JSplitPane 在设置 setOneTouchExpandable 为true之后,
点击小三角之后,右侧panel隐藏,想得到右侧窗口是不是隐藏的状态,如何实现 ?
监听小三角的事件 ?
还是有对应的属性可以进行判断 ?
...全文
669 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
BILLMYAIM 2009-12-08
  • 打赏
  • 举报
回复
顶一个
realreachard 2009-12-03
  • 打赏
  • 举报
回复
呵呵,3Q,

光想要怎么重写三角的事件了,受教了
gentalguo 2009-12-03
  • 打赏
  • 举报
回复
顺便说一句哈,不是针对任何人,更不是lz,何况还拿了美女当头像……

其实很多时候稍稍深入探寻一点就可以探求到事情的真相。
很简单,其实我也不知道。只是想到,改变的一定是分割条的位置,那么极大的可能会调用setDividerLocation方法。跟踪进去,看一下实现

public void setDividerLocation(int location) {
int oldValue = dividerLocation;

dividerLocation = location;

// Notify UI.
SplitPaneUI ui = getUI();

if (ui != null) {
ui.setDividerLocation(this, location);
}

// Then listeners
firePropertyChange(DIVIDER_LOCATION_PROPERTY, oldValue, location);

// And update the last divider location.
setLastDividerLocation(oldValue);
}


firePropertyChange(DIVIDER_LOCATION_PROPERTY, oldValue, location);
看一下,这个函数的原型,前面是属性名称,后面是是其内部的两个参数,可以一直跟踪
JSplitPane-->JComponent-->Component-->ProportyChangeSupport
到这里可以看到这样:

public void firePropertyChange(String propertyName,
Object oldValue, Object newValue) {
if (oldValue != null && newValue != null && oldValue.equals(newValue)) {
return;
}
firePropertyChange(new PropertyChangeEvent(source, propertyName,
oldValue, newValue));
}

也就是说生成了一个新的事件PropertyChangeEvent。
那oldValue,newValue也都可以从这个对象事件中取得了。
而前面的 public final static String DIVIDER_LOCATION_PROPERTY = "dividerLocation";
很容易找到定义。
当然前面的代码写的不好,应该是:

sp.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY,
new PropertyChangeListener() {

@Override
public void propertyChange(PropertyChangeEvent evt) {
// TODO Auto-generated method stub
System.out.println(sp.getDividerLocation());
}

});
realreachard 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gentalguo 的回复:]
sp是new出来的一个JScrollPane
Java code
sp.addPropertyChangeListener("dividerLocation",new PropertyChangeListener() {

@Overridepublicvoid propertyChange(PropertyChangeEvent evt) {// TODO Auto-generated method stub System.out.println(sp.getDividerLocation());
}

});
[/Quote]

对头
gentalguo 2009-12-03
  • 打赏
  • 举报
回复
sp是new出来的一个JScrollPane

sp.addPropertyChangeListener("dividerLocation",
new PropertyChangeListener() {

@Override
public void propertyChange(PropertyChangeEvent evt) {
// TODO Auto-generated method stub
System.out.println(sp.getDividerLocation());
}

});
shine333 2009-12-03
  • 打赏
  • 举报
回复
就是这个办法
shine333 2009-12-03
  • 打赏
  • 举报
回复
getWidth() == 0
realreachard 2009-12-03
  • 打赏
  • 举报
回复
自己顶

右侧收起来之后,getLocationOnScreen() 也是有值的,不是null,

想到一个办法 getSize() 如果width是0的话,就是被隐藏了...

求更好的办法.
realreachard 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 swandragon 的回复:]
boolean isVisible()
    确定此对象是否可见。注:这意味着该对象多半是可见的;但是因为包含此对象的对象之一目前不可见,所以可能在屏幕上不显示它。要确定对象是否在屏幕上显示,需要使用 isShowing()。

boolean isShowing()
    确定是否正显示对象。通过检查该对象和祖先的可见性可确定这一点。注:即使该对象被另一对象屏蔽(例如,它是下拉菜单的下级),仍然返回 true。
[/Quote]
谢谢
试了一下,点击三角,右侧收起来之后,查看这个右侧panel的isshowing()结果也是true,
swandragon 2009-12-03
  • 打赏
  • 举报
回复
boolean isVisible()
确定此对象是否可见。注:这意味着该对象多半是可见的;但是因为包含此对象的对象之一目前不可见,所以可能在屏幕上不显示它。要确定对象是否在屏幕上显示,需要使用 isShowing()。

boolean isShowing()
确定是否正显示对象。通过检查该对象和祖先的可见性可确定这一点。注:即使该对象被另一对象屏蔽(例如,它是下拉菜单的下级),仍然返回 true。
realreachard 2009-12-03
  • 打赏
  • 举报
回复
顶者有分,谢谢各位了

62,635

社区成员

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

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