我有一个带有此代码的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?,或者我该怎么做才能解决这个错误?
答案 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();
}