3

我试图在我的 JDesktopPane 中访问 JInternalFrame 并使用 getAllFrames 方法。

我只想按照我添加到 JDesktopPane 中的顺序访问 JInternalFrame。例如,我添加 a,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 

有没有其他方法可以按照我将其添加到桌面窗格中的顺序获取内部框架?

4

1 回答 1

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();
}

}

于 2012-05-20T17:13:34.023 回答