package game;import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;import heroes.Hero;import javax.swing.BoxLayout;
import javax.swing.JDialog;public class HeroChoosingDialog extends JDialog {
View myView;
boolean answerable =false;
//下面这一句用final对么,因为如果不用final的话,我的编译器会在 mouseClicked()内部报错。
//但是我实在很迷惑 final用在parameter上表示的是什么? 是不是只初始化一次之后,再也不能改变?
public HeroChoosingDialog(final View myView){
super(myView, "Choose Your Hero");
setModal(false);
this.myView = myView;
setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
this.setVisible(true);
this.setAlwaysOnTop(true);
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e){
if(answerable){
for(Hero every: heroes){
if(e.getSource().equals(every)){
answerable = false;
myView.heroChosen(every);
break;
}
}
}
}
});
;
this.pack();
answerable = true;
}
ArrayList<Hero> heroes;
public void addHero(Hero h){
heroes.add(h);
add(h);
pack();
}
}
import java.awt.event.MouseEvent;
import java.util.ArrayList;import heroes.Hero;import javax.swing.BoxLayout;
import javax.swing.JDialog;public class HeroChoosingDialog extends JDialog {
View myView;
boolean answerable =false;
//下面这一句用final对么,因为如果不用final的话,我的编译器会在 mouseClicked()内部报错。
//但是我实在很迷惑 final用在parameter上表示的是什么? 是不是只初始化一次之后,再也不能改变?
public HeroChoosingDialog(final View myView){
super(myView, "Choose Your Hero");
setModal(false);
this.myView = myView;
setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
this.setVisible(true);
this.setAlwaysOnTop(true);
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e){
if(answerable){
for(Hero every: heroes){
if(e.getSource().equals(every)){
answerable = false;
myView.heroChosen(every);
break;
}
}
}
}
});
;
this.pack();
answerable = true;
}
ArrayList<Hero> heroes;
public void addHero(Hero h){
heroes.add(h);
add(h);
pack();
}
}
改成
this.myView.heroChosen(every);
就行了final是用来声明引用是不可变的,就这个程序而言可以不需要这个声明
改成this.myView.heroChosen(every);
以后,用的是成员myView,而不是参数myView,所以就不需要final了