您好 我有一个带有JTable的MainWindow,这是一个Stuff列表。如果你双击其中一个,有一个detailView打开一个新的框架(在新窗口中)。现在,如果一个detailView已经打开,我该如何重新激活它而不是打开一个呢? 可以以某种方式在Java中获得可见帧数组吗?
谢谢!
答案 0 :(得分:1)
我认为如果您使用frame.setVisible(true);
框架获得焦点
要指示已打开的帧数,请:
1)如果您的MainWindow中有一系列帧,那么您可以这样做
getOpenedFrames() {
int openedFrames = 0;
for(int i=0; i<arraOfFrames.length; i++) {
JFrame frame = arrayOfFrames[i];
if(frame.isVisible) openedFrames++;
}
return openedFrames;
}
或强>
2)如果你没有一个帧数组,那么使用一个标志int来跟踪已打开的帧数:
int openedFrames = 0;
每次打开一个新框架时,每次关闭一个框架时,将opensFrames增加1,减少打开框架数量减去1
答案 1 :(得分:0)
一种方法是在CardLayout
中使用detailView
,为每个Stuff
设置一个子面板。然后在儿童面板之间切换。优点是切换detailView
面板时Stuff
的大小不会改变。但是你将为所有Stuff创建不必要的面板。
另一种方法是使用某种方法JFrame
扩展showStuff(Stuff s)
(或者在其中创建一个包含JFrame
实例的类,并提供一些基本方法:show
,{ {1}},close
)清除框架内容并显示新内容。
答案 2 :(得分:0)
首先,“详细信息”窗口不应该是JFrame,它应该是(模态?)对话框。
我无法从您的问题中判断出您是想为表格中的每一行创建一个详细信息对话框,还是为整个表格创建一个对话框。
如果你想要一个表格的对话框,那么解决方案很简单,只需使用模态对话框,然后用户将被迫关闭详细信息对话框,然后再打开另一个。
如果您想要多个对话框,请使用HashMap跟踪打开的对话框。也许使用行号作为键,然后将对话框添加为值。然后,您将WindowListener添加到对话框中。每次打开/关闭对话框时,都会更新HashMap。
答案 3 :(得分:0)
我做了一个Controller类,它包含带有键的Hashmap中的所有detailView。控制器有一个方法show(Stuff s),如果s已经在列表中,我会做一个detailView.toFront(),否则我创建一个新的detailView,将它插入到Hashmap中。