是否有任何方式从JinternalFrame调用其他JinternalFrame,但在主Jframe的desktopPane中。

时间:2013-03-24 13:15:34

标签: call jinternalframe

下面的“代码部分1”用于从MDI应用程序中的menuItem调用UcakListesi(JinternalFrame)而没有问题。

我想使用相同的代码从另一个JinternalFrame调用相同的UcakListesi(JinternalFrame)但是,我收到有关“desktopPane.add(nw);”的错误行见代码部分2.无法访问主jframe desktopPane表单JinternalFrame ..

有没有办法从JinternalFrame调用其他JinternalFrame,但是在主Jframe的desktopPane中。

抱歉,我的英语很差。

问候并感谢你。

---code part 1---
private void UckListeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                                 
    //Uçak listesi penceresi çağrılıyor
    UcakListesi nw = UcakListesi.getInstance();
    nw.pack();
    if (nw.isVisible()) {
    } else {
        desktopPane.add(nw);
        nw.setVisible(true);
    }
    try {
        //açılan internal frame'in max size ile açılması için 
        nw.setMaximum(true);
    } catch (PropertyVetoException ex) {
        Logger.getLogger(AnaUygulama.class.getName()).log(Level.SEVERE, null, ex);
    }
} 
---code part 2---
class PopUpx extends JPopupMenu {
JMenuItem anItem1;
JMenuItem anItem2;
JMenuItem anItem3;
JMenuItem anItem4;
JMenuItem anItem5;
JSeparator anSeparator1; 
JSeparator anSeparator2; 
JSeparator anSeparator3; 
JSeparator anSeparator4; 
JMenu yeni;
ActionListener anListener2;



public  PopUpx(final String x){
    anItem1 = new JMenuItem(x+ " numaralı Uçak için");
    anItem2 = new JMenuItem("Detay Bilgiler");
    anItem3 = new JMenuItem("Arıza İş Emri Aç");
    anItem4 = new JMenuItem("Uçuş Öncesi Servis");
    anItem5 = new JMenuItem("Uçuş Sonrası Servis");
    anSeparator1 = new JSeparator();
    anSeparator2 = new JSeparator();
    anSeparator3 = new JSeparator();
    anSeparator4 = new JSeparator();
    yeni = new JMenu ("Servis İşlemleri");


    add(anItem1);
    anItem1.setEnabled(false);
    add(anSeparator1);
    add(anItem2);
    anItem2.addActionListener(new ActionListener() {

            @Override
        public void actionPerformed(ActionEvent event) {
            System.out.println(x+" nolu uçağın "+anItem2.getText()+" basıldı"); 

            UcakListesi nw = UcakListesi.getInstance();
    nw.pack();

    if (nw.isVisible()) {
    } else {

      //problem is here 
       desktopPane.add(nw);
        nw.setVisible(true);
    }
    try {
        //açılan internal frame'in max size ile açılması için 
        nw.setMaximum(true);
    } catch (PropertyVetoException ex) {
        Logger.getLogger(AnaUygulama.class.getName()).log(Level.SEVERE, null, ex);
    }

        }

    });



    anItem2.setToolTipText(x+ " numaralı Uçağın Detay Bilgilerine ulaşılır...");


    add(anSeparator2);
    add(anItem3);
    add(anSeparator3);
    yeni.add(anItem4);
    add(anSeparator4);
    add(yeni); 
    yeni.add(anItem4);
    yeni.add(anSeparator4);
    yeni.add(anItem5);

 }}

2 个答案:

答案 0 :(得分:3)

我找到了解决方案。

用于第一个类(MainApplication),其中Jframe和JDesktopPane位于下面的代码

public javax.swing.JDesktopPane getDesktopPane() {
    return desktopPane;
}

然后在任何类似的JinternalFrame类文件中使用来调用另一个(YourJinternalFrame)

 YourJinternalFrame  nw = YourJinternalFrame.getInstance();
    nw.pack();
    if (nw.isVisible()) {
    } else {
        getDesktopPane().add(nw);
        nw.setVisible(true);
    }
    try {
        nw.setMaximum(true);
    } catch (PropertyVetoException ex) {
        Logger.getLogger(MainApplication.class.getName()).log(Level.SEVERE, null, ex);
    }

只获取一个名为JinternalFrame的实例 将此代码放在名为JinternalFrame(YourJinternalFrame)

的下方
private static YourJinternalFrame myInstance;

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

谢谢我:)。

答案 1 :(得分:0)

首先在f2按钮动作上创建f1帧对象

F1 f1 = new F1();

然后像这样创建一个JDesktopPane对象

JDesktopPane desktopPane = getDesktopPane();
desktopPane.add(f1);//add f1 to desktop pane
f1.setVisible(true);// set the f1 frame visible

最后如果需要处理当前帧

this.dispose();