如何管理调用另一个JInternalFrame的JInternalFrame?

时间:2013-03-14 21:17:48

标签: java swing jinternalframe jdesktoppane

我有一个带有此代码的JDesktopPane。

public class Menu extends JFrame implements ActionListener{
/**
 * Creates new form Portada
 */
public static JDesktopPane desktop;

public JDesktopPane getDesktop() {
    return desktop;
}

public Menu() {
    desktop = new JDesktopPane();
    setContentPane(desktop);

    desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
    initComponents();
}
}

然后我添加像这样的新组件

desktop.add(orden);

当我想给他们打电话时我会用

if(e.getSource()==jMenuItem1_1){
        orden.setVisible(true);
        desktop.setSelectedFrame(orden);
        desktop.moveToFront(orden);
        try {
            orden.setSelected(true);
        } catch (PropertyVetoException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }

我得到的问题是,当“orden”想要弹出另一个JInternalFrame时,我会使用下一个代码。

searchSupplier.setVisible(true);
    Main.getInstance().getPortada().getDesktop().add(searchSupplier);
    Main.getInstance().getPortada().getDesktop()
            .moveToFront(searchSupplier);
    try {
        searchSupplier.setSelected(true);
    } catch (PropertyVetoException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

当我执行该事件超过2次时,我得到下一个错误:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: illegal component position

我应该在哪里将新的JInternalFrame添加到DesktopPane?或者是Orden?,或者我该怎么做才能解决这个错误?

1 个答案:

答案 0 :(得分:4)

如果searchSupplier框架已经在桌面上,则您不太可能再次添加它。尝试使用getParent确定是否需要添加框架

if (searchSupplier.getParent() == null) {
    Main.getInstance().getPortada().getDesktop().add(searchSupplier);
}
searchSupplier.setVisible(true);
Main.getInstance().getPortada().getDesktop().moveToFront(searchSupplier);
try {
    searchSupplier.setSelected(true);
} catch (PropertyVetoException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}