紧急JAVA问题!!

先送上100分再说!问题:我现在有一个array,n多个JButton那我想给他们加上功能总不能一个一个加吧!放在for循环里面貌似还是不行啊!!!我的代码如下!publ... 先送上100分再说!
问题:我现在有一个array,n多个JButton
那我想给他们加上功能总不能一个一个加吧!放在for循环里面貌似还是不行啊!!!
我的代码如下!

public class StudentList implements ActionListener{
private static JButton[] remove;
public void actionPerformed(ActionEvent e){
String numOfStudents = DataManager.getNumberOfStudents(EditClass.getSelectedTableName());
try{
studentNum=Integer.parseInt(numOfStudents);
}
catch(NumberFormatException ex){
JOptionPane.showMessageDialog(frame, "Should be an integer: "+ex);
}
remove = new JButton[studentNum];
for(int i=0;i<studentNum;i++){
remove[i].setBounds(243,92+30*i,85,20);
panel.add(remove[i]);
remove[i].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
try{
int result = JOptionPane.showConfirmDialog(null,
"Delete student?");
switch (result) {
case JOptionPane.YES_OPTION: DataManager.deleteStudent(Integer.parseInt(studentID[i]),studentName[i]);
break;
case JOptionPane.NO_OPTION:
break;
case JOptionPane.CLOSED_OPTION:
break;
}
}catch (Exception ex){
JOptionPane.showMessageDialog(panel, ex);
}
}
});
}
Eclipse说问题出在DataManager.deleteStudent(Integer.parseInt(studentID[i]),studentName[i]);
这一行!
Cannot refer to a non-final variable i inside an inner class defined in a different method
这是怎么回事啊啊啊啊啊

我本来想用
public void actionPerformed(ActionEvent ae)
ae.getSource()这个方法不过这是array啊.....我应该咋办。。。。!
谢谢!!号答案继续追加奖励!
补充一下!Datamanager是另一个class
然后就是我会继续追加悬赏的!
在线等一定要帮忙啊啊啊啊谢谢大家!
展开
 我来答
我是谁我在哪我要干什么呢
2012-06-10 · TA获得超过560个赞
知道小有建树答主
回答量:350
采纳率:100%
帮助的人:373万
展开全部
你的JButton上显示的是学生学号?点击该按钮询问是否删除学号学生?匿名类中使用i,需要将i定义为类变量,并且还得是final修饰,显然这么做行不通。
就不要用匿名类。该类直接继承Actionlistener,重写方法。可以这样写:
public void actionPerformed(ActionEvent ae){
JButton jb=(JButton)e.getSource();
for(int i=0;i<remove.sie();i++){
if(jb.equals(remove[i])){
try{
int result = JOptionPane.showConfirmDialog(null,"Delete student?");
.。。。。省略了
}catch(....){}
}
}
再看一遍题,你是在actionPerformed()中新增那些按钮,然后再加监听。按钮为什么不在构造中加入,还是需要触发事件动态加入?如果这样,那就重写一个类继承Actionlistener,需要把remove传进去。简写:
class MyAction implements Actionlistener{
JButton []remove;
public MyAction(JButton []remove){
this.remove=remove;
}
public void actionPerformed(ActionEvent ae){
//和上面一样
}
}
在for循环中添加监听 remove[i].addActionListener(new ActionListener(new MyAction(remove)))即可。
建议for循环增加按钮在构造中实现。
有问题就追问。
abcdef4love
2012-06-10 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:106
采纳率:100%
帮助的人:61.6万
展开全部
我看了一会代码,
既然eclipse报错DataManager.deleteStudent(Integer.parseInt(studentID[i]),studentName[i]);这一行

那你貌似应该查找DataManager下deleteStudent方法吧?

再者我还有些其他的疑问。

比如你循环数据for(int i=0;i<studentNum;i++)

i是从0开始循环,

而从DataManager.deleteStudent(Integer.parseInt(studentID[i]),studentName[i]);这行看,

这貌似是个控件的id,

以我个人习惯而言,

一般命名都是从1开始,

我不知道你这里是否一致

再者,

DataManager.deleteStudent这个函数啊,

一般而言我会传一个id,

貌似你是在操作array,

嗯,貌似·····

你问问题最好详细些,

deleteStudent出错你也不挂上相关代码,这样是不行的······
追问
因为加了这个deleteStudent的话问题会好长...因为是个JDBC-ODBC蛮长的。。
从0开始因为是array嘛...所以..
我这整段代码的目的其实就是从remove[0]上加上这个功能一直加到第[学生人数]个remove...
所以就差不多是
remove[0]给他这功能,i++.
remove[1]给他这功能,i++.
一直加到最后...
studentID和studentName都是array,
我的想法是
如果用户点击了remove[0]这个按钮,那么就从Access上删掉StudentName[0]和StudentID[0]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Mugen_Masuta
2012-06-10
知道答主
回答量:1
采纳率:0%
帮助的人:1618
展开全部
不要用匿名类,也就是那个监听

把他声名为一个类,并实现actionlistener接口

手机不好打,呵呵
追问
呃....就是把ActionPerformed弄到外面去?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式