我在对话框的文本框内弹出一个JWindow的小框,JWindow里面有一个JList。
JList设置了鼠标监听,如果双击,则设置jWindow.setVisable(false),且把JList的选择结果添加到文本框内。
JWindow也设置了鼠标监听。但是,现在我弹出JWindow后,鼠标一单击JWindow,JWindow就消失了(不是真正的消失,是隐藏到后面去了),
这时候,程序根本没走到JList还是JWindow的鼠标监听里。我把对话框关掉并且当前窗口最小化,然后就看到隐藏在后面的JWindow了,这时候单击还是双击事件都能捕获到了。
请问这是怎么回事?网上查了下,说JWindow无法获得焦点,我又把JWindow换为JFrame,
结果弹出的时候不是弹出的最顶层,也是隐藏在最后面,怎么才能让JFram弹出的时候显示在最外面呢?就像模式对话框那样。我这里我觉得应该使用JFrame,因为JWindow无法获得焦点,它的JList的值我无法通过键盘上下键选择。

解决方案 »

  1.   

    用JDialog也比JFrame好啊
    一个工程中,最好只有一个Framejframe = new JFrame();
    new JDialog(jFrame);
    这样的Dialog就是一直在顶层的
      

  2.   

    是啊,JFrame不好,任务栏还多显示一个。最好的是JWindow,没任何边框,但是它里面的JList不支持鼠标上下选择,有啥方法可以支持?就像PL/SQL编辑器里面输入表名+“.”后会弹出一个字段列表,可以上下选择。用JDialog有个缺陷,我想在框弹出后,点击文本的空白区域,框会消失,必须用模式对话框....PL/SQL里面弹出的列表框是啥?Dialog还是JWindow?
      

  3.   

    jframe = new JFrame();
    new JDialog(jFrame);
      

  4.   

    swing 这块的东西 ?
      

  5.   

    JFrame frame = new JFrame();
    frame.setVisible(true);
    JDialog dia = new JDialog(frame);
    dia.setSize(100, 100);
    dia.setUndecorated(true);
    dia.setAlwaysOnTop(true);
    dia.setVisible(true);
    重点是setUndecorated和setAlwaysOnTop
    可以实现JDialog的无边框,一直在顶层的效果
      

  6.   

    To sunyiz
    谢谢。但是我试了下还是不行,估计是因为我在模式对话框内弹出JWindow/JFrame,而模式对话框始终显示在最顶层。
      

  7.   

    jwindow.setVisible(true);
    jwindow.toFront();
    jlist.requireFocusInWindow();
      

  8.   

    搞定了,模式对话框在弹出一个JWindow,这个JWinodw始终无法获得焦点,除非把对话框关了。
    现在在对话框的JTextArea内画了一个JPanel,该显示的时候显示。