use*_*304 3 java swing multiple-instances jpanel jframe
如何在不退出整个应用程序的情况下基于该特定帧内的JPanel上的模拟退出特定帧?
在我的主类中,我有一个Frame()方法
public void FightFrame(String offensemsg){
JFrame frame = new JFrame("BattleView: ");
frame.setLayout(new BorderLayout());
FightScene sc = new FightScene();
frame.add(sc);
frame.setVisible(true);
frame.setSize(652, 480);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
sc.GenerateScene(offensemsg);
}
Run Code Online (Sandbox Code Playgroud)
在我的FightScene类中,我正在绘制一个fightscene,该类也有checkCollision()方法
public void checkCollisions() {
for (int i = 0; i < defense.size(); i++) {
FriendlyEntity m = (FriendlyEntity) defense.get(i);
Rectangle r1 = m.getBounds();
for (int j = 0; j<offense.size(); j++) {
Enemy a = (Enemy) offense.get(j);
Rectangle r2 = a.getBounds();
if (r1.intersects(r2)) {
m.setHealth(-1);
a.setHealth(-1);
if(a.getHealth()==0){
a.setVisible(false);
} else if(m.getHealth()==0){
m.setVisible(false);
}
}}
}
if(defense.size()==0){
System.out.println("You have lost the battle\n");
//############ How can I exit the FightFrame from here?
}else if (offense.size()==0){
System.out.println("You have won the battle\n");
//############# How can I exit the FightFrame from here?
}
}
Run Code Online (Sandbox Code Playgroud)
设置JFrame#setDefaultCloseOperation为JFrame.DISPOSE_ON_CLOSE
JFrame frame=new JFrame();//create frame
//so when we exit or dispose of Jframe it doesnt exit the entire app
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
...
frame.pack();
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
现在关闭框架只需:
frame.dispose();//close the `JFrame` instance
Run Code Online (Sandbox Code Playgroud)
更新:
我理解但是如何触发这个withing
FightScene()(这是一个JPanel)?
将实例传递JFrame给JPanelvia 构造函数或setter
要么
如果你不想在JPanel类/方法中使用实例,请执行以下操作:
JFrame frame = (JFrame) SwingUtilities.getWindowAncestor(this);
frame.dispose();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7840 次 |
| 最近记录: |