2012-05-20 20 views
3

我試圖訪問我的JDesktopPane中的JInternalFrame並使用getAllFrames方法。如何獲得我添加它的順序JInternalFrame

我只想按照我添加到JDesktopPane中的順序訪問JInternalFrame。 例如i加一,B,C

frames[0] contain a 
frames[1] contain b 
frames[2] contain c 

但是我發現,在陣列中的內容將在我改變我的選擇的情況下發生變化。 每次我改變我的選擇。 數組中選定的JInternalFrame將移動到頂部。

例如,我的選擇B 陣列將變得

frames[0] contain b 
frames[1] contain a 
frames[2] contain c 

是否有任何其他方式來獲得在我將其添加到desktoppane順序內部框架??

+3

你總是可以創建和維護一個'的ArrayList '。 –

+1

This [answer](http://stackoverflow.com/a/2741726/230513)引用這樣一個例子。 – trashgod

回答

1
package org.app; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.JDesktopPane; 
import javax.swing.JFrame; 
import javax.swing.JInternalFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.event.InternalFrameAdapter; 
import javax.swing.event.InternalFrameEvent; 


public class MainFrame extends JFrame{ 
    private static final long serialVersionUID = 1L;  
    private JDesktopPane theDesktop; 
    private List<JInternalFrame> frameList=new ArrayList<>(); 

public MainFrame() { 
    super("Internal Frame Demo"); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setSize(800,600); 
    this.setJMenuBar(setMenubar()); 
    theDesktop=new JDesktopPane(); 
    this.add(theDesktop); 
    this.setVisible(true); 
} 

public JMenuBar setMenubar() { 
    JMenuBar bar=new JMenuBar(); 
    JMenu addMenu=new JMenu("Add"); 
    JMenuItem newFrame=new JMenuItem("Internal Frame"); 
    newFrame.addActionListener(new MenuAction()); 
    addMenu.add(newFrame); 
    bar.add(addMenu); 
    return bar; 
} 

public JInternalFrame addInternalFrame() { 
    JInternalFrame jif=new JInternalFrame("Internal frame",true,true,true,true); 
    jif.setSize(new Dimension(240, 300));  
    jif.addInternalFrameListener(new InternalFrameAdapter() { 
     @Override 
     public void internalFrameClosing(InternalFrameEvent e){    
      frameList.remove(e.getInternalFrame());     
      System.out.println("from frame closing event");   
     } 
    }); 
    jif.show(); 
    return jif; 
} 
public JInternalFrame getInternalFrame(int index) { 
    return frameList.get(index); 
} 
class MenuAction implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent e) {    
     JInternalFrame f=addInternalFrame(); 
     theDesktop.add(f); 
     frameList.add(f);   
     System.out.println("from menu action"); 
    }   
} 
public static void main(String[] args){ 
    new MainFrame(); 
} 

}

+0

請參閱[*初始線程*](http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)和[*如何使用操作*](http://docs.oracle的.com/JavaSE的/教程/ uiswing /雜項/ action.html)。 – trashgod

+0

thx很多有用的例子! – code4j

相關問題