帮忙搞定这段代码(50分)

  • 主题发起人 主题发起人 lichengxing
  • 开始时间 开始时间
L

lichengxing

Unregistered / Unconfirmed
GUEST, unregistred user!
不采用参数的方法,直接从一个匿名的监听类中访问外部参数,而参数不声明为final
有何办法?
我看到了一段如下代码,但编译无法通过
JRadioButton jrabnAll = new JRadioButton("/u5168/u90E8/u5B89/u88C5");
jrabnAll.addChangeListener(jrabnAll. new ChangeListener() {
public void stateChanged(ChangeEvent e)
{
if(jrabnAll.isSelected())
{
jta.setText("ok");
}
}
});
 
C++语法吧?
 
出错提示?
 
匿名类当然不会有名字
jrabnAll. new ChangeListener()
怎么来的? 直接用new ChangeListener() {}就行了!
监听器怎么能有
jrabnAll.isSelected()的参数?
要用ChangeEvent中的对象引用!
jta.setText("ok");
是什么对象呢?是外部定义的吗?
 
jrabnAll、jta 都是匿名类的外部对象,我不想利用传入参数进行控制,这样做不能
充分控制外部对象。
匿名类对全局对象可以直接控制,但像以上代码(去掉jrabnAll.)
,同位于构造函数中,编译时却提示“变量必须声明为final”

to:snjat
"test.java": Error #: 481 : package and class have same name: com.sun.java.swing.JRadioButton at line 67, column 49
"test.java": Error #: 300 : class ChangeListener not found in class com.sun.java.swing.JRadioButton at line 67, column 49
 
你的源代码不全,看不出问题,根据错误提示是:包名与类名重复了
如:
package test;
import java.sql.*;
import java.util.*;
public class test{
}
另一个错误就好办了,你用这个试试javax.swing.JRadioButto
 
public void addChangeListener(ChangeListener l)
参数是实现ChangeListener接口的类!jrabnAll. new ChangeListener() {}是什么呢?
从语法上就是错误的!参数必须是监听器类!
匿名本地类可以直接访问外部类成员!你的两个错误与本地类访问外部类成员无关!
为实现对成员的访问大多数都会在外部类中实现ChangeListner接口,用外部类来作为
监听器类!
 
TO:zhuad
please test the following code:

public test()
{
JRadioButton jrabnAll = new JRadioButton("/u5168/u90E8/u5B89/u88C5");
jrabnAll.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e)
{
if(jrabnAll.isSelected())
{
System.out.println("ok");
}
}
});
}
 
// Show how to access class member in inner class.
[Delete]
 
jrabnAll、jta 都是匿名类的外部对象,我不想利用传入参数进行控制,这样做不能
充分控制外部对象。
匿名类对全局对象可以直接控制,但像以上代码(去掉jrabnAll.)
,同位于构造函数中,编译时却提示“变量必须声明为final”
I want the following code:
public class Test {

public Test () {
public JButton btnTest = new JButton();
btnTest.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
//Test.this.btnTest.setText("Test");
}
});
}
}
 
JRadioButton jrabnAll = new JRadioButton("/u5168/u90E8/u5B89/u88C5");
jrabnAll.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e)
{
if(jrabnAll.isSelected())
{
jta.setText("ok");
}
}
});
 
多人接受答案了。
 
后退
顶部