我正在尝试使JButton click事件修改按钮所在的JFrame。问题是类本身是JFrame(从它扩展),所以我不能从处理事件的内部类调用'this'。我找到了一个有效的解决方案,但我认为它可能导致其他问题,所以我试图寻找另一种方法。代码如下:
public class ClassX extends JFrame {
...
this.setTitle("Title1"); //works fine
jButton1 = new JButton();
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
//this.setTitle("Title1"); //calling 'this' won't work inside an inner class
//Ugly Solution
JButton btn = (JButton) e.getSource();
JFrame frme = (JFrame) btn.getParent().getParent().getParent().getParent();
frme.setTitle("Title2");
}
});
...
}
我正在尝试避免多个getParent调用,但无法找到其他解决方案。有任何想法吗?有没有办法将'this'或任何其他参数传递给动作侦听器方法?
感谢。
答案 0 :(得分:2)
答案 1 :(得分:1)
ClassX.this.setTitle("Title2");
答案 2 :(得分:0)
为什么不实现ActionListener接口而不是内部ActionListener类?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ClassX extends JFrame implements ActionListener
{
JButton jButton1;
public ClassX()
{
jButton1 = new JButton();
jButton.addActionListener(this);
this.add(jButton);
}
public void actionPerformed(ActionEvent e)
{
this.setTitle("Button Clicked!")
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ClassX frame1 = new ClassX();
frame1.setVisible(true);
}
} );
}
}