Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用其他jinternalframe类将jinternalframe类添加到jdesktoppane_Java_Jinternalframe_Jdesktoppane - Fatal编程技术网

Java 使用其他jinternalframe类将jinternalframe类添加到jdesktoppane

Java 使用其他jinternalframe类将jinternalframe类添加到jdesktoppane,java,jinternalframe,jdesktoppane,Java,Jinternalframe,Jdesktoppane,我正在创建一个非常简单的程序。 我创建了以下类: MainJframeClass、JDesktopPaneClass、JinternalFrameClass1和JinternalFrameClass2。 我所做的是实例化了我的jdesktoppaneclass并将其命名为desktoppane1,然后将其添加到MainJframeclass中。我还实例化了2个JinternalFrame,并将其命名为internal1和internal2。现在,我在mainjframeclass中有一个按钮,当

我正在创建一个非常简单的程序。 我创建了以下类: MainJframeClass、JDesktopPaneClass、JinternalFrameClass1和JinternalFrameClass2。
我所做的是实例化了我的jdesktoppaneclass并将其命名为desktoppane1,然后将其添加到MainJframeclass中。我还实例化了2个JinternalFrame,并将其命名为internal1和internal2。现在,我在mainjframeclass中有一个按钮,当我按下该按钮时,我将internal1添加到desktoppane1。我现在的问题是如何使用internal1中的某个按钮将internal2添加到desktoppane1。我知道为什么我可以在desktoppane1中添加另一个按钮,然后添加internal2。但是我已经做了,我只是想解决这个问题。如果你能帮助我,请。顺便说一下,我的英语很抱歉。

这只是参考资料的问题。向JDesktopPane添加内容的代码必须有对它的引用,因此需要通过构造函数参数或方法参数将该引用传递给需要它的类

编辑1
例如:

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;

public class ReferenceExample extends JPanel {
   private JDesktopPane desktop = new JDesktopPane();
   private Random random = new Random();

   public ReferenceExample() {
      JButton addInternalFrameBtn = new JButton("Add Internal Frame");
      addInternalFrameBtn.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
            addInternalFrame();
         }
      });
      JPanel btnPanel = new JPanel();
      btnPanel.add(addInternalFrameBtn);

      setPreferredSize(new Dimension(600, 450));
      setLayout(new BorderLayout());
      add(new JScrollPane(desktop), BorderLayout.CENTER);
      add(btnPanel, BorderLayout.SOUTH);
   }

   public void addInternalFrame() {
      MyInternalFrame intFrame = new MyInternalFrame(ReferenceExample.this);
      int x = random.nextInt(getWidth() - intFrame.getPreferredSize().width);
      int y = random.nextInt(getHeight() - intFrame.getPreferredSize().height);
      intFrame.setLocation(x, y);
      desktop.add(intFrame);
      intFrame.setVisible(true);
   }

   private static void createAndShowUI() {
      JFrame frame = new JFrame("Reference Eg");
      frame.getContentPane().add(new ReferenceExample());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}

class MyInternalFrame extends JInternalFrame {

   // pass in the reference in the constructor
   public MyInternalFrame(final ReferenceExample refEg) {
      setPreferredSize(new Dimension(200, 200));
      setClosable(true);

      JButton addInternalFrameBtn = new JButton("Add Internal Frame");
      addInternalFrameBtn.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
            // use the reference here
            refEg.addInternalFrame();
         }
      });
      JPanel panel = new JPanel();
      panel.add(addInternalFrameBtn);
      getContentPane().add(panel);
      pack();
   }
}
如何使用internal1中的某个按钮将internal2添加到desktoppane1

在添加到按钮的ActionListener中,您可以使用如下代码获取对桌面窗格的引用:

Container container = SwingUtilities.getAncestorOfClass(JDesktopPane.class, (Component)event.getSource());

if (container != null)
{
    JDesktopPane desktop = (JDesktopPane)container;
    JInternalFrame frame = new JInternalFrame(...);
    desktop.add( frame );
}