2013-03-17 56 views
0

我创建了一个Swing应用程序,其中包含多个JInternalFrame,在鼠标单击事件时将其添加到JDesktopPane。我只想要在DesktopPane中存在相同内部框架的一个实例。我不想当用户打开框架时出现两次相同的框架..一次只能打开一个JInternalFrame

+2

向我们展示什么,你都试过了。 – 2013-03-17 13:01:31

+0

我用这种方法“removeAll()” – pixylife 2013-03-17 13:18:11

+0

想法是:如果你点击一个标签或按钮,使用setEnable(false),这将禁用按钮,直到用户关闭InternalFrame,然后启用按钮。 – Azad 2013-03-17 13:29:39

回答

2

简单的解决方案是您的问题是创建一个HashMap<String,JInternalFrame>key将标题JInternalFramevalueobjectJInternalframe当前打开。当第一次打开内部框架时保存(key,value)对HashMap。禁用所有JInternalFrame窗口的关闭按钮,以便用户不能处理显示的JInternalFrame窗口。注册esc关键各JInternalFrame对象,这样,当按下键盘的按键esc当你menu item点击打开相同的内部框架当前显示JInternalFrame最小的DesktopPane。现在,检查一下,JInternalFrametitle中存在的那HashMapkey。如果存在,则检索该keyvalue,并通过JInternalFrame变量引用它,然后在DesktopPane上恢复相同的值。如果在HashMap中不存在相应的title条目,则创建一个新的JInternalFrame对象,在HasMap中为其输入相同的内容并显示它。

注:无论我已经张贴在这里是哪里 你可以有许多种JInternalFrame每个都具有独特的 不同functionality局势的解决方案,并希望只保留一个的每个 instance那些JInternalFrame

+0

http://docs.oracle.com/javase/tutorial/uiswing/events/internalframelistener.html这是有用的.. – pixylife 2013-03-17 13:32:04

+0

@luzifer:是的。我已经过去了..你可以隐藏或最小化'JInternalFrame'取决于你的需要..我在这里发布的是解决方案,你可以有多种类型的'JInternalFrame',每种具有不同的功能,并且你只想保留每个'JInternalFrame'的一个实例.. – 2013-03-17 13:38:02

+0

非常感谢你。 .. – pixylife 2013-03-17 14:02:35

2

以下是可能的示例代码。希望这个帮助。 菜单操作调用其中JdesktopPane的主应用程序中的内部框架。

private void YourJinternalFrameMenuItemActionPerformed(java.awt.event.ActionEvent evt) {             

    YourJinternalFrame nw = YourJinternalFrame.getInstance(); 
    nw.pack(); 
    //usefull part for you.. if open shows, if not creates new one 
    if (nw.isVisible()) { 
    } else { 
     desktopPane.add(nw); 
     nw.setVisible(true); 
    } 
    try { 

     nw.setMaximum(true); 
    } catch (PropertyVetoException ex) { 
     Logger.getLogger(MainApplication.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

把你YourJinternalFrame

private static YourJinternalFrame myInstance; 

public static YourJinternalFrame getInstance() { 
    if (myInstance == null) { 
    myInstance = new YourJinternalFrame(); 
    } 
return myInstance; 
1

试试这个简单的代码,这里面:

YourJinternalFrame nw = new YourJinternalFrame(); 

private void YourJinternalFrameMenuItemActionPerformed(java.awt.event.ActionEvent evt) {             
    if(!nw.isVisible()){ 
     YourJDesktopPane.add(nw); 
     nw.setVisible(true); 
    } 

} 
0

试试这个简单的代码 起飞类变量CHK并设置等于0 然后调用的JFrame方法 componentremoved 在这个集合中再次chk = 0 ,如果你打电话给你的内部框架设置 CHK = 1 和调用内部比较CHK wheather它是零个或不 多数民众赞成