【问题标题】:Button actionlistener calls another action listener in the same class按钮动作监听器调用同一个类中的另一个动作监听器
【发布时间】:2016-05-10 23:45:17
【问题描述】:

我有一个提交按钮(和一个动作监听器),它检查插入到 Futoshiki 谜题中的数字是否合法(检查二维数组是否有重复等)

在另一种方法中,我有一个带有动作侦听器的实际网格,它获取数字并将它们插入到二维数组中。

JButton 动作监听器

JButton isRight = new JButton("Check My Answer");
isRight.addActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent e) {

    if (!(puzzle.isLegal())) {
      JOptionPane.showMessageDialog(FutoshikiFrame.this,
        puzzle.getProblems(),
        "You made a mistake!",
        JOptionPane.INFORMATION_MESSAGE);
    } else {
      JOptionPane.showMessageDialog(FutoshikiFrame.this,
        "YOU WIN!",
        "YES THATS FINE",
        JOptionPane.INFORMATION_MESSAGE);
    }
    puzzle.printProblems.clear();

  }
});

网格动作监听器

 public void keyReleased(KeyEvent e) {
   String getInsertedValue = Emptysquare.getText();
   int getInsertedIntValue = Integer.parseInt(getInsertedValue);
   setSquareValue(r, c, getInsertedIntValue);
   System.out.print(getSquareValue(r, c));
 }

有没有一种方法可以让我从 JButton 访问 keyReleased 动作侦听器,以便它基本上“提交”网格的内容,然后检查其是否合法?

【问题讨论】:

    标签: java


    【解决方案1】:

    当然,要么保留对该动作侦听器的引用并使用null 值调用keyReleased 方法,或者将keyReleased 的内容重构为自己的方法并从两个侦听器调用此方法。

    【讨论】:

    • 我将如何调用keyReleased 方法?这是我的 setGrid 方法 中的一个方法。如果这是一件坏事,请提前道歉
    • 您肯定在方法中没有方法,因为这是不可能的。您可能在方法内的匿名类中有一个方法。但正如我所说,要么将此匿名类的实例分配给其他范围可以访问的某个变量,要么将方法的内容重构为两个范围都可以访问的方法。
    【解决方案2】:

    虽然给出了 2 种其他方法,但您可以使用另外一种方法,但我不确定哪种方法最好使用。

    public class YourClass {
        JButton isRight;
    
        public YourClass() {
            this.isRight = new JButton();
    
            this.isRight.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    YourClass.this.isRight.getKeyListeners()[0].keyReleased(null);
    
                    //Other action related code
                }
            });
    
            isRight.addKeyListener(new KeyListener() {
                public void keyReleased(KeyEvent e) {
                    //Key related code
                }
    
                //Other required key listener methods
            });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-24
      • 2011-06-26
      • 2021-03-13
      • 2013-11-10
      • 1970-01-01
      • 2011-08-30
      • 2021-07-02
      • 2013-03-01
      相关资源
      最近更新 更多