论坛首页 Java企业应用论坛

开源项目Visual Swing for Eclipse

浏览 125010 次
该帖已经被评为良好帖
作者 正文
   发表时间:2008-08-28  
insiku 写道
rehte 写道
glasspane无法阻止键盘事件,是因为键盘事件是直接发送到当前焦点组件上的。glasspane一般是jpanel或者其他非focusable的容器,因此它们无法获得焦点。但是你可以通过设置glasspane为focusable,然后通过调用requestfocus来获得焦点,然后应该就可以屏蔽键盘事件了。
JComponent glass = ...;
glass.setVisible(true);
glass.addMouseLis...;
glass.addKeyLi...;
glass.setFocusable(true);
glass.requestFocus();

需要注意的是上面的代码中glass的setVisible(true)必须在glass.setFocusable和glass.requestFocus之前,否则glass无法获得焦点,也就无法拦截键盘事件。


键盘事件直接发送到当前焦点组件上
如果不在事件派发上做动作 那只能使被阻止的组件获得焦点

glasspane获得焦点以后 要设置InputVerifier  避免使用tab切换焦点


终于明白最疑惑的东西,得学习下键盘焦点管理啦,呵呵,谢谢两位
0 请登录后投票
   发表时间:2008-08-28  
insiku 写道
我收回我昨天说的话

不管是在glasspane上 还是 在JLayeredPane.POPUP_LAYER 上做文章 都可以实现 blocking

键盘事件无法阻止 可能是blocking pane 无法获得焦点导致
另外要注意的是 tab切换焦点 blocking pane 要加上InputVerifier 保持焦点

不过这种方式 会把这个顶层窗体都blocking掉  如果想block单独的组件 那可能需要组件继承JRootPane

不过swing的设计太强大了  应该还有其他办法
比如说blocking pane中添加鼠标和键盘的监听 根据鼠标位置判断是否需要consume事件
不过这种方式会使用户迷糊 鼠标的变化不够明显 用户会迷惑为什么不能输入


to insiku

consume方法有什么用处?
假设btn位于组件树的第5层上,我们也在btn上加了MouseListener事件(不是ActionListener)。难道我们还能在事件到达第5层的btn前,就把这个事件得到,然后把这个事件作废?

问题是:
1、除了通过btn,我们无法得到此事件,既然得不到,当然更不能consume啦
2、假设我们得到了此事件,调用consume方法有什么用呢?难道调用了此方法后,事件就不会继续向下层组件传递了吗?   在jdk文档中,这么解释consumed的作用“在源处理了事件之后,控制是否将事件发送回同位体,false 表示将事件发送给同位体;true 则不发送。语义事件始终具有 'true' 值,因为它们由响应低级别事件的同位体生成。 ”
看粗体部分在源处理了事件之后,既然是这样,那还是说明事件有源来处理,即由btn来处理的啊?
consume到底是干什么的方法???

0 请登录后投票
   发表时间:2008-09-04  
有没有Java Swing开发桌面宠物的例子或思路之类的??
0 请登录后投票
   发表时间:2008-09-05  
有一段时间没来了!看到这个项目不断的发展,真的很开心!
0 请登录后投票
   发表时间:2008-09-24  
swing还是太麻烦啊,前段时间我碰到个问题,JList的阻止行焦点改变问题,当我点击另一个选项的时候,先判断是否允许,因为可能做一些保存工作,弹出一个对话框如选择取消,则行焦点应该仍然保存住,我没找到一个好办法既保持住焦点也不触发itemChanged事件。有一个阻止焦点改变的事件就好了,PB就有,听说C++也有。有人说用PropertyListener,好像叫这个名字,但没找到相关的例子,
0 请登录后投票
   发表时间:2008-09-24  
fxbird 写道
swing还是太麻烦啊,前段时间我碰到个问题,JList的阻止行焦点改变问题,当我点击另一个选项的时候,先判断是否允许,因为可能做一些保存工作,弹出一个对话框如选择取消,则行焦点应该仍然保存住,我没找到一个好办法既保持住焦点也不触发itemChanged事件。有一个阻止焦点改变的事件就好了,PB就有,听说C++也有。有人说用PropertyListener,好像叫这个名字,但没找到相关的例子,


没有做不到
只有你想不到
swing的灵活性怎么是PB和C++能比的?

public class Test9
{
    public static void main(String[] args)
    {
        final JFrame f = new JFrame();
        JList list = new JList(new String[]{"1","2","3","4","5","6","7","8","9","10"}){

            @Override
            public int locationToIndex(Point location)
            {
                int selectedIndex = getSelectedIndex();
                
                int option = JOptionPane.showConfirmDialog(f, "Are you sure select this?", "Confirm", JOptionPane.YES_NO_OPTION);
                
                if(option == JOptionPane.YES_OPTION)
                    return super.locationToIndex(location);
                else
                    return selectedIndex;
            }
        };
        
        
        f.add(new JScrollPane(list));
        
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.setSize(300, 500);
        f.setVisible(true);
    }
}
0 请登录后投票
   发表时间:2008-10-16  
实现一个菜单设计器不是太容易,忙了很久才把菜单设计器搞定,打算从此之后不再添加大的功能。下面是新的菜单设计器的设计示意图,欢迎大家去http://code.google.com/p/visualswing4eclipse/下载试用:


0 请登录后投票
   发表时间:2008-10-29  
楼主的博客拜读了很久,收获不小。其实我觉得既然用了 eclpise,那楼主为什么不为 eclipse 设计一个 swt 的界面设计器?eclipse 的软肋就在界面设计上,到现在都没有一个好用的工具。虽然现在 eclipse 在国内还是比较流行,但最近随着 javafx 的出现,以后很难说 swt 还有什么比较好的发展,迟迟也没有看到 eclipse swt 项目对 swt 的一些更新,swt 4 据说会支持 wpf 什么的,但在非 windows 平台上怎么办?而且始终无法实现直接在浏览器上的插件或者 applet 支持,这是 swt 比 swing 差的一个地方。最近在网上也找到了一个叫 vx30 的公司,设计了一款纯 java 实现的流媒体视频解决方案,在客户端上直接通过 applet 的方式实现视频播放,不需要 jmf,不需要其他额外的二进制 native 解码库,当然,视频音频格式好像是他们自己开发的,但完全通过在客户端浏览器上的 applet 内部采用纯 java 代码进行视频和音频 decode 并回放就可以了,大家可以访问 http://www.mauionline.com/cgi-bin/WebObjects/MauiOnline.woa/wa/videoShowcase 这个旅游网站,就是采用这个技术的,很有趣,另外也听说国外有公司已经采用纯 java 以及 swing 开发出了 h.264 解码器了。swt 在图形渲染上已经落后太多了,draw2d 目前始终还是通过操作系统的 gc 方式来渲染,始终都没有类似 java2d 的解决方案?java2d 现在在 windows 上采用 direct3d 9 或者 opengl 的 pipeline 来实现 2d 图形的硬件加速渲染,在 linux 等平台上则是采用 opengl,swt 呢?至于 3d 方面,swing 有 java3d(现在已开源并更新了)、jogl 等等厉害角色支持,swt 好像还是在依靠 swt_awt 桥接方式简单利用一下 jogl 吧?国外网上开始大量出现基于 java applet 的 3d 网络游戏,swt 在这方面有什么打算?
0 请登录后投票
   发表时间:2008-10-30  
楼主,你的这个工具Linux下能不能用啊?
0 请登录后投票
   发表时间:2008-10-30  
qinglangee 写道
楼主,你的这个工具Linux下能不能用啊?

这款工具是纯Java代码的,理论上应该能在Linux上面运行。但是由于采用了SWT_AWT技术,SWT_AWT工作的并不是稳定,尤其设计焦点传送等问题,开发时也只测试了在Windows平台的,因此不能保证在Linux上的运行质量。
刚才在Linux测试了一下,发现有一些小毛病,但总的来看还能使用。以后会修改让它能运行在Linux上的。
下图是在Linux上运行的效果图

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics