Java 如何按我添加的顺序获得JInternalFrame
我试图访问JDesktopPane中的JInternalFrame并使用getAllFrames方法 我只想按照添加到JDesktopPane中的顺序访问JInternalFrame。 例如,我添加了a、b、cJava 如何按我添加的顺序获得JInternalFrame,java,arrays,swing,jinternalframe,jdesktoppane,Java,Arrays,Swing,Jinternalframe,Jdesktoppane,我试图访问JDesktopPane中的JInternalFrame并使用getAllFrames方法 我只想按照添加到JDesktopPane中的顺序访问JInternalFrame。 例如,我添加了a、b、c frames[0] contain a frames[1] contain b frames[2] contain c 但我发现,如果我更改选择,数组中的内容将发生变化。 每次我改变我的选择。 阵列中选定的JInternalFrame将移动到顶部 例如,我选择b 阵列将成为 fram
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
是否有其他方法可以按照我添加到Desktopane的顺序获取内部框架???package org.app;
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();
}
导入java.awt.Dimension;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JDesktopPane;
导入javax.swing.JFrame;
导入javax.swing.JInternalFrame;
导入javax.swing.JMenu;
导入javax.swing.JMenuBar;
导入javax.swing.JMenuItem;
导入javax.swing.event.InternalFrameAdapter;
导入javax.swing.event.InternalFrameEvent;
公共类大型机扩展JFrame{
私有静态最终长serialVersionUID=1L;
私人JDesktopPane theDesktop;
私有列表框架列表=新的ArrayList();
公共主机(){
超级(“内部框架演示”);
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这个。设置大小(800600);
setJMenuBar(setMenubar());
theDesktop=新JDesktopPane();
添加(desktop);
此.setVisible(true);
}
公共JMenuBar setMenubar(){
JMenuBar=新的JMenuBar();
JMenu addMenu=新JMenu(“添加”);
JMenuItem newFrame=新JMenuItem(“内部框架”);
addActionListener(newMenuAction());
addMenu.add(newFrame);
添加(添加菜单);
返回杆;
}
公共JInternalFrame addInternalFrame(){
JInternalFrame jif=新的JInternalFrame(“内部框架”,真,真,真,真);
jif.设置尺寸(新尺寸(240300));
addInternalFrameListener(新的InternalFrameAdapter(){
@凌驾
公共无效internalFrameClosing(InternalFrameEvent e){
frameList.remove(例如getInternalFrame());
System.out.println(“从帧关闭事件”);
}
});
jif.show();
返回jif;
}
公共JInternalFrame getInternalFrame(int索引){
返回frameList.get(索引);
}
类MenuAction实现ActionListener{
@凌驾
已执行的公共无效操作(操作事件e){
JInternalFrame f=附加内部框架();
在顶部添加(f);
框架清单。添加(f);
System.out.println(“从菜单操作”);
}
}
公共静态void main(字符串[]args){
新主机();
}
}您始终可以创建和维护
ArrayList
。这就是一个例子。另请参见和。