紧急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
然后就是我会继续追加悬赏的!
在线等一定要帮忙啊啊啊啊谢谢大家! 展开
问题:我现在有一个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
然后就是我会继续追加悬赏的!
在线等一定要帮忙啊啊啊啊谢谢大家! 展开
3个回答
展开全部
你的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循环增加按钮在构造中实现。
有问题就追问。
就不要用匿名类。该类直接继承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循环增加按钮在构造中实现。
有问题就追问。
展开全部
我看了一会代码,
既然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出错你也不挂上相关代码,这样是不行的······
既然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]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不要用匿名类,也就是那个监听
把他声名为一个类,并实现actionlistener接口
手机不好打,呵呵
把他声名为一个类,并实现actionlistener接口
手机不好打,呵呵
追问
呃....就是把ActionPerformed弄到外面去?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询