【问题标题】:How to get a JInternalFrame in the order i add it如何按我添加的顺序获取 JInternalFrame
【发布时间】:2012-05-27 06:45:30
【问题描述】:

我尝试在我的 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 

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

【问题讨论】:

  • 您可以随时创建和维护ArrayList<JInternalFrame>
  • 这个answer 引用了这样一个例子。

标签: java arrays swing jinternalframe jdesktoppane


【解决方案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();
}

}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-10-13
  • 2022-01-16
  • 1970-01-01
  • 2021-04-19
  • 2020-03-06
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多