FrameA里面有几个toggleButton,我想用这几个togglebutton来控制FrameB的开关.
比如事toggleButoon[0]控制FrameB[0]这个意思.
可是当我用for循环定义action的时候,提示说要把 i 变成 final.
谢谢.FrameA代码
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;import javax.swing.JFrame;
import javax.swing.JToggleButton;
public class FrameA extends JFrame implements ActionListener {
int i=1;
public FrameB fb[];
JToggleButton toggleButton[];
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
FrameA frame = new FrameA();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} /**
* Create the frame
*/
public FrameA() {
super();
getContentPane().setLayout(null);
fb = new FrameB[10];
JToggleButton toggleButton[] = new JToggleButton[3];
setBounds(100, 100, 195, 180);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for(int i=0; i<3; i++){
toggleButton[i] = new JToggleButton();
toggleButton[i].setText("ToggleButton");
toggleButton[i].setBounds(10, 25+i*50, 144, 26);
getContentPane().add(toggleButton[i]);
toggleButton[i].addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
JToggleButton newtb1 = (JToggleButton)arg0.getSource();
if(newtb1.isSelected())
{
System.out.println("on");
fb[i]= new FrameB(); //问题出在这里,说是要把i变成final
}else{
System.out.println("off");
fb[i].dispose(); //同样,i的问题
}
}
});
}
}
}
比如事toggleButoon[0]控制FrameB[0]这个意思.
可是当我用for循环定义action的时候,提示说要把 i 变成 final.
谢谢.FrameA代码
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;import javax.swing.JFrame;
import javax.swing.JToggleButton;
public class FrameA extends JFrame implements ActionListener {
int i=1;
public FrameB fb[];
JToggleButton toggleButton[];
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
FrameA frame = new FrameA();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} /**
* Create the frame
*/
public FrameA() {
super();
getContentPane().setLayout(null);
fb = new FrameB[10];
JToggleButton toggleButton[] = new JToggleButton[3];
setBounds(100, 100, 195, 180);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for(int i=0; i<3; i++){
toggleButton[i] = new JToggleButton();
toggleButton[i].setText("ToggleButton");
toggleButton[i].setBounds(10, 25+i*50, 144, 26);
getContentPane().add(toggleButton[i]);
toggleButton[i].addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
JToggleButton newtb1 = (JToggleButton)arg0.getSource();
if(newtb1.isSelected())
{
System.out.println("on");
fb[i]= new FrameB(); //问题出在这里,说是要把i变成final
}else{
System.out.println("off");
fb[i].dispose(); //同样,i的问题
}
}
});
}
}
}
解决方案 »
- 生产者、消费者多线程《小鸟请教》
- sql2008 初学者 用JAVA连接不上
- java.lang.Enum<E>类 与 enum关键字 有什么区别? 各如何使用?
- java中调用存储过程分页
- System.out.flush();是什么意思?
- 正则式<.*?>为什么不能匹配HTML的注释标签?
- 问一些有关于CORE JAVA的问题,请高手们不吝赐教,万分感谢~
- 在线等候,解决立刻给分!!童叟无欺!!!
- 怎样把type为int的数据强制转化成String型???(很菜的问题,大家见笑了:-))
- 关于IBM SecureWay Directory(3.2.2)的配置与使用
- 写了一个JAVA倒计时程序,和大家交流下。
- JAVA基础知识测试题
ToggleButton的数量是动态的,这里取了3只是作为测试.
然后在actionPerformed中可以个通过newtb1.getText()中的数字来判断是第几个按钮
給这个类构造函数加个参数i,同时加一个属性
不就可以了吗
也就是一个按钮有一个ActionListenerXXX对象,同时这个对象有个属性记录是那个按钮以oo的思想来写的话都不需要传i而是直接传递button对象給你新写的ActionListenerXXX类做属性就行了,通过构造函数传不加final是非静态语言才能实现的比如js之类。