3

このコードを含む 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 に?、またはこのエラーを修正するにはどうすればよいですか?

4

1 に答える 1

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();
}
于 2013-03-14T21:39:04.977 に答える