2011-07-29 81 views
2

我正在創建一個非常簡單的程序。 我已經創建了這個類: MainJframeClass,JDesktopPaneClass,JinternalFrameClass1和JinternalFrameClass2。 我做的是,我實例化我的jdesktoppaneclass並將其命名爲desktoppane1,並將其添加到MainJframeclass。我還實例化了兩個jinternalframes並將其命名爲internal1和internal2。現在,我有mainjframeclass中的按鈕,當我按下時,我將internal1添加到desktoppane1。現在我的問題是如何使用放置在internal1中某處的按鈕將internal2添加到desktoppane1。我知道爲什麼我可以只添加另一個按鈕到desktoppane1並添加internal2。但我已經做到了,我只想解決這個問題。如果你能幫助我。對不起,我的英語順便說一句。使用其他jinternalframe類將jinternalframe類添加到jdesktoppane

回答

3

這只是一個參考問題。向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(); 
    } 
} 
1

如何添加internal2使用internal1某處放置一鍵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); 
} 
相關問題