我正在清理我的代码。我读到我把ActionListener
放到另一个类是更好的。这就是我做的。
但是在我的ActionListener
中,除了代码中的某些点外,一切都有效,我得到了setSize(xx,xx)
。我以前工作过,因为它在同一个班级。但不是了。我尝试了多种解决方案,但我无法理解。
ActionListener
:
public class ActionFrame implements ActionListener{
public void actionPerformed(ActionEvent e){
Object src = e.getSource();
if(src == Frame.Console_Bouton){
System.out.println("Bouton console");
if(getSize().getWidth() >= 750){
/** If True (Retirer) */
for(int i = 1090; i > 689; i--){
setSize(i, 490);
System.out.println("Rétractation du Frame");
}
}else{
/** If False (Etirer) */
for(int i = 689; i < 1090; i++){
setSize(i, 490);
System.out.println("Etirage du Frame");
}
}
}
...
至于错误,没有,它只会冻结程序。
答案 0 :(得分:2)
猜测:可能这种情况下提取ActionListener
不是一个好主意,因为它使用了对象的private
方法。
具有通用/可重用功能的类应该独立使用。只要它们是用于特定用途,实践(根本不是!)只是将它们尽可能地靠近它们使用的地方。我可以想象你的setSize
方法不是你班级的一部分&#39;公共界面,因此ActionListener
仅仅是“胶水”。将活动与特定班级结合。
在这种情况下,你会创建一个小小的&#39;胶水线:
abstract class ActionAdapter implements ActionListener {
}
...
frame.Console_Bouton.addActionListener(
new ActionAdapter(){ // anonymous inner class
void actionPerformed(ActionEvent e){
... // (no need to check source!)
}
});
答案 1 :(得分:1)
创建一个新类:
ButtonAction implements actionListner
{
//put the code above here
}
答案 2 :(得分:0)
这样做的好方法是使用回调机制。
我已在此处的相同背景中发布了答案
- 编辑 -
从ActionEvent
获取源代码然后找到它的父级(如果需要,获取父级的父级,直到获得需要重新调整大小的所需组件)并在其上调用setSize()
。
答案 3 :(得分:-1)
在控制器中创建View的实例
将setSize(xx,yy)
方法的访问修饰符从private
更改为public
。
将setSize
中的actionPerformed()
替换为view.setSize(xx,yy)
。