2014-11-02 87 views
0

这是我的源代码。 我无法将我的JInternalframe置于前面。 我已经尝试了很多代码,但没有任何工作。如何从所有打开的内框架将前框架置于前面?

private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {           
    boolean b = true; 
    JInternalFrame[] j = jDesktopPane1.getAllFrames(); 
    no = new NewOrder(); 

    for (JInternalFrame Ji : j) { 
     if (Ji.isShowing()) { 
      b = false; 
      break; 
     } 
    } 

    if (!b) { 
     no.requestFocus(true); 
    } else { 
     dm = jDesktopPane1.getDesktopManager(); 
     jDesktopPane1.add(no); 
     dm.setBoundsForFrame(no, (jDesktopPane1.getWidth() - no.getWidth())/2, (jDesktopPane1.getHeight() - no.getHeight())/2, no.getWidth(), no.getHeight()); 
     dm.openFrame(no); 
     no.setVisible(true); 
    } 


} 

NewOrder no = new NewOrder(); 

if (no.isShowing()) { 
    no.toFront(); 
} else { 
    lo.LoadInterfaces(no, jDesktopPane1); 
} 

任何机构可以请解释一下我为什么这事? 谢谢!

回答

1

使用setSelected()方法JInternalFrame;一个完整的例子被引用here。为方便起见,请调用Action中的方法,如here所示。

附录:典型的实现可能如下所示。

class MyFrame extends JInternalFrame { 

    private Action action; 

    MyFrame(…) { 
     … 
     action = new AbstractAction(name) { 
      @Override 
      public void actionPerformed(ActionEvent ae) { 
       try { 
        MyFrame.this.setSelected(true); 
       } catch (PropertyVetoException e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 
    } 

    public Action getAction() { 
     return action; 
    } 
} 
+0

setselected()不工作..你可以给我另一个想法.. – 2014-11-02 17:07:12

+0

我觉得你得到它的工作;如果您仍然遇到问题,请编辑您的问题以包含显示您的方法的[完整示例](http://stackoverflow.com/help/mcve)。 – trashgod 2014-11-03 01:38:43

+0

好的,我会感谢你@trashgod – 2014-11-03 05:18:44

1

我发现它..

NewOrder no = new NewOrder(); 

    if (no.isShowing()) { 
     no.toFront(); 
    } else { 
     lo.LoadInterfaces(no, jDesktopPane1); 
    } 

这只是删除初始化。而做初始化和申报一次。请任何机构解释我为什么发生这种情况。请。

+1

'toFront()'有条件地调用'setSelected()'。 – 2014-11-04 16:06:33

+0

@Catalina岛在工作时间表中影响不同吗? – 2014-12-09 03:09:48

+0

必须显示内部框架或相应的图标以允许选择。 – 2014-12-09 11:15:34