一个JInternalFrame实例

时间:2012-09-06 13:34:02

标签: java swing jinternalframe

我正在使用JinternalFrames处理swing应用程序,但是当我打开一个Jinternelframe时,它出现在JDesktopePane中,再次点击同一个组件,另一个实例显示出来。 我试图通过在构造函数中声明每个JInternalFrame的新实例来解决这个问题,但是在内存方面它没用,所以我问是否有任何方法可以解决这个问题。 非常感谢你们。

2 个答案:

答案 0 :(得分:2)

Lazy-init the frames:

private JInternalFrame frame1;
private JInternalFrame frame2;
...

/**
 * invoked when the button used to show the first frame is clicked
 */
private void showFrame1() {
    if (frame1 == null) {
        frame1 = new JInternalFrame();
        // TODO initialize the frame
    }
    // TODO show the frame
}

// same for the other frames

答案 1 :(得分:0)

以下是示例代码。希望这个帮助。 在主应用程序中调用内部框架的菜单操作,其中包含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;