gpt4 book ai didi

java - 重用 ActionListener

转载 作者:行者123 更新时间:2023-12-02 01:14:27 28 4
gpt4 key购买 nike

我正在开发 GUI 纸牌游戏,我想知道是否有办法改进我的代码。这是我的情况。

我有三张牌:A、B 和 C。玩家可以通过分别单击三个按钮之一来更换牌:分别是按钮 1、按钮 2 或按钮 3。

class rpbtn implements ActionListener {
public void actionPerformed(ActionEvent e) {
Image1 = new ImageIcon(myDeck.myDeck[5].filename);
label_Image1.setIcon(Image1);
}
}

变量名称是固定的。然而,我不想通过仅将变量名称从 1 更改为 2 或 3 来创建 3 个类似的内部类。有没有办法可以重用/改进这些代码?
谢谢。

最佳答案

请记住,您可以在内部类中使用构造函数、setter 等。因此,如果 actionPerformer 的代码相同,但仅更改受影响的元素,则您可以拥有一个唯一的内部类,其中包含一个用于执行操作的参数。像这样的事情:

private class MyListener implements ActionListener {

Object obj;

private MyListener(Object obj) {
this.obj = obj;
}

@Override
public void actionPerformed(ActionEvent ev) {
//Operations on obj
}

}

您可以使用此 JFrame 示例进行测试(只需实例化它):

package tests;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class MainWindow extends JFrame {

public MainWindow() {

JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 2");
JLabel label1 = new JLabel("Label 1");
JLabel label2 = new JLabel("Label 2");

MyListener ml1 = new MyListener(label1);
MyListener ml2 = new MyListener(label2);

button1.addActionListener(ml1);
button2.addActionListener(ml2);

getContentPane().setLayout(new GridLayout(0, 1));

getContentPane().add(label1);
getContentPane().add(label2);
getContentPane().add(button1);
getContentPane().add(button2);

pack();
setLocation(600, 300);
setVisible(true);

}

private class MyListener implements ActionListener {

JLabel label;

private MyListener(JLabel label) {
this.label = label;
}

@Override
public void actionPerformed(ActionEvent ev) {
label.setVisible(!label.isVisible());
}

}

}

即使您希望代码更紧凑,您也可以将 MyListener 实例用作匿名:

button1.addActionListener(new MyListener(label1));

希望这可以帮助您适应您的特定需求。

关于java - 重用 ActionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58887402/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com