2

下面的“代码部分 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);

 }}
4

2 回答 2

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;

谢谢我:)

于 2013-03-25T21:15:58.997 回答
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();
于 2016-09-20T06:33:11.517 回答