java - 另一个类中的 Action 监听器 - java

标签 java swing listener

可以有两个类,并且在一个类似的类中

arrayButtons[i][j].addActionListener(actionListner);

在另一个

ActionListener actionListner = new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            for (int j = 0; j < arrayButtons.length; j++) {
                for (int i = 0; i < arrayButtons[j].length; i++) {
                    if (arrayButtons[j][i] == e.getSource()) {

                        if ((gameNumber == 2) && (playHand.getNumberOfCards() == 0)) {
                            if (player[j].getCard(i).getSuit() == Suit.HEARTS.toString() && player[j].hasSuitBesideHearts())
                                //second game
                                messageOnTable("xxx");

                            else{
                                arrayButtons[j][i].setVisible(false);
                                test[j].setIcon(player[j].getCard(i).getImage());
                                pnCardNumber[j].setText(Integer.toString(player[j].getCard(i).getNumber()));
                                pnCardName[j].setText(player[j].getCard(i).toString());
                                pnCardSuit[j].setText(player[j].getCard(i).getSuit());

                                playHand.addCard(player[j].getCard(i), j);

                                player[j].removeCard(i);

                            }

                        }

}

//还有更多 这是因为我需要将按钮( Swing )与 Action 监听器分开

我该怎么做?

谢谢

最佳答案

不仅可以将这两者分开,而且还推荐这样做(请参阅 MVC 模式 - 这在很大程度上是关于将按钮等屏幕控件与程序逻辑分开)

我想到的最简单的方法是编写一个实现 ActionListener 接口(interface)的命名类,如下所示:

public class SomeActionListener implements ActionListener{

    private JTextField textField1;
    private JComboBox combo1;
    private JTextField textField2;
    //...

    public SomeActionListener(JTextField textField1, JComboBox combo1, 
                                          JTextField textField2){
        this.textField1=textField1;
        this.combo1=combo1;
        this.textField2=textField2;
        //...
    }

    public void actionPerformed(ActionEvent e) {
        //cmd
    }

}

然后将其添加到您的按钮中:

ActionListener actionListener = new SomeActionListener(textField1, combo1, textField2);
someButton.addActionListener(actionListener);

关于java - 另一个类中的 Action 监听器 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4985507/

相关文章:

java - for循环填充if语句参数

java - 使用 for 循环的更好方法?

java - 从后台线程调用主线程上的函数

java - 如何避免将此方法和所有其他变量设为静态?

java - 对于长度超过 30 个字符的字符串,正则表达式模式匹配需要很长时间

java - JFrame 着色应该喜欢这张图片

java - 从几个点绘制曲线

java - 在不同对象中执行操作后修改对象的最佳方法

actionscript-3 - 如何修改现有的 AS3 事件以便我可以传递数据?

java - 什么是未经检查的强制转换警告以及 java 在这种情况下期望做什么