Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将int赋值给JButtons以提高方法的效率?_Java_Swing_Icons_Jbutton_Actionlistener - Fatal编程技术网

Java 将int赋值给JButtons以提高方法的效率?

Java 将int赋值给JButtons以提高方法的效率?,java,swing,icons,jbutton,actionlistener,Java,Swing,Icons,Jbutton,Actionlistener,我正在制作一个有9个按钮的游戏,每个按钮的功能基本相同。我怎样才能使这些按钮都有一个int(0-8)连接到它们,这样我就不必写相同的方法9次?以下是当前的方法: public void actionPerformed(ActionEvent e) { if(e.getSource() == cardOne) { if(boardArray.get(0).selected == false) { getPath(0);

我正在制作一个有9个按钮的游戏,每个按钮的功能基本相同。我怎样才能使这些按钮都有一个int(0-8)连接到它们,这样我就不必写相同的方法9次?以下是当前的方法:

public void actionPerformed(ActionEvent e) {

        if(e.getSource() == cardOne) {
            if(boardArray.get(0).selected == false) {
                getPath(0);
                buttons[0].setIcon(selectedIcon);
                boardArray.get(0).selected = true;

            }else{
                boardArray.get(0).selected = false;
                buttons[0].setIcon(boardArray.get(0).cardImage);
            }

        }
        if(e.getSource() == cardTwo) {
            if(boardArray.get(1).selected == false) {
                getPath(1);
                buttons[1].setIcon(selectedIcon);
                boardArray.get(1).selected = true;
            }else{
                boardArray.get(1).selected = false;
                buttons[1].setIcon(boardArray.get(1).cardImage);
            }

        }
        if(e.getSource() == cardThree) {
            if(boardArray.get(2).selected == false) {
                getPath(2);
                buttons[2].setIcon(selectedIcon);
                boardArray.get(2).selected = true;
            }else{
                boardArray.get(2).selected = false;
                buttons[2].setIcon(boardArray.get(2).cardImage);
            }

        }
        if(e.getSource() == cardFour) {
            if(boardArray.get(3).selected == false) {
                getPath(3);
                buttons[3].setIcon(selectedIcon);
                boardArray.get(3).selected = true;
            }else{
                boardArray.get(3).selected = false;
                buttons[3].setIcon(boardArray.get(3).cardImage);
            }

        }
        if(e.getSource() == cardFive) {
            if(boardArray.get(4).selected == false) {
                getPath(4);
                buttons[4].setIcon(selectedIcon);
                boardArray.get(4).selected = true;

            }else{
                boardArray.get(4).selected = false;
                buttons[4].setIcon(boardArray.get(4).cardImage);
            }

        }
        if(e.getSource() == cardSix) {
            if(boardArray.get(5).selected == false) {
                getPath(5);
                buttons[5].setIcon(selectedIcon);
                boardArray.get(5).selected = true;
            }else{
                boardArray.get(5).selected = false;
                buttons[5].setIcon(boardArray.get(5).cardImage);
            }

        }
        if(e.getSource() == cardSeven) {
            if(boardArray.get(6).selected == false) {
                getPath(6);
                buttons[6].setIcon(selectedIcon);
                boardArray.get(6).selected = true;
            }else{
                boardArray.get(6).selected = false;
                buttons[6].setIcon(boardArray.get(6).cardImage);
            }

        }
        if(e.getSource() == cardEight) {
            if(boardArray.get(7).selected == false) {
                getPath(7);
                buttons[7].setIcon(selectedIcon);
                boardArray.get(7).selected = true;
            }else{
                boardArray.get(7).selected = false;
                buttons[7].setIcon(boardArray.get(7).cardImage);
            }

        }
        if(e.getSource() == cardNine) {
            if(boardArray.get(8).selected == false) {
                getPath(8);
                buttons[8].setIcon(selectedIcon);
                boardArray.get(8).selected = true;
            }else{
                boardArray.get(8).selected = false;
                buttons[8].setIcon(boardArray.get(6).cardImage);
            }

        }
您可以使用设置每个按钮对应的编号,并在
actionPerformed
方法调用
e.getActionCommand()
中,将该
String
解析为
int

您可以使用设置每个按钮对应的编号,并在
actionPerformed
方法调用
e.getActionCommand>中()
并将该
字符串
解析为
int

您可以。。。 通过某种
Map
将每个
JButton
int
关联

private Map<JButton, Integer> mapButtons;
//...
mapButtons = new HashMap<JButton, Integer>(25);
mapButtons.put(cardOne, 1);
如果您不想在代码中引入另一个对象

你可以。。。 通过按钮
clientProperty
property关联一个值

btn.putClientProperty("value", 1);

public void actionPerformed(ActionEvent e) {
    Object source = e.getSource();
    if (source instanceof JButton) {
        JButton btn = (JButton)source;
        value = (Integer)btn.getClientProperty("value");
你可以。。。 使用按钮
actionCommand
属性,该属性需要一个
字符串
,但您可以将其转换为
int
值。它有点凌乱,但可以完成任务…

您可以。。。 通过某种
Map
将每个
JButton
int
关联

private Map<JButton, Integer> mapButtons;
//...
mapButtons = new HashMap<JButton, Integer>(25);
mapButtons.put(cardOne, 1);
如果您不想在代码中引入另一个对象

你可以。。。 通过按钮
clientProperty
property关联一个值

btn.putClientProperty("value", 1);

public void actionPerformed(ActionEvent e) {
    Object source = e.getSource();
    if (source instanceof JButton) {
        JButton btn = (JButton)source;
        value = (Integer)btn.getClientProperty("value");
你可以。。。
使用buttons
actionCommand
属性,该属性需要一个
字符串,但您可以将其强制转换为
int
值。这有点混乱,但可以完成任务…

另一种可能是创建一个实现
ActionListener
的内部类,如下所示:

  public class ButtonActionListener implements ActionListener {
    private final int boardElement;

    ButtonActionListener(int boardElement) {
      this.boardElement = boardElement;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      if (boardArray.get(boardElement).selected == false) {
        getPath(boardElement);
        buttons[boardElement].setIcon(selectedIcon);
        boardArray.get(boardElement).selected = true;
      } else {
        boardArray.get(boardElement).selected = false;
        buttons[boardElement].setIcon(boardArray.get(boardElement).cardImage);
      }
    }
  }
然后,在创建
JButton
对象时,使用所需索引添加此操作侦听器的实例:

  // Just an example, it's not clear to me how the buttons[] array is created
  for (int i = 0; i < boardArray.size(); ++i) {
    buttons[i] = new JButton();
    // Other stuff as needed
    buttons[i].addActionListener(new ButtonActionListener(i));
  }
//只是一个例子,我不清楚buttons[]数组是如何创建的
对于(int i=0;i
另一种可能性是创建一个实现
ActionListener
的内部类,如下所示:

  public class ButtonActionListener implements ActionListener {
    private final int boardElement;

    ButtonActionListener(int boardElement) {
      this.boardElement = boardElement;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      if (boardArray.get(boardElement).selected == false) {
        getPath(boardElement);
        buttons[boardElement].setIcon(selectedIcon);
        boardArray.get(boardElement).selected = true;
      } else {
        boardArray.get(boardElement).selected = false;
        buttons[boardElement].setIcon(boardArray.get(boardElement).cardImage);
      }
    }
  }
然后,在创建
JButton
对象时,使用所需索引添加此操作侦听器的实例:

  // Just an example, it's not clear to me how the buttons[] array is created
  for (int i = 0; i < boardArray.size(); ++i) {
    buttons[i] = new JButton();
    // Other stuff as needed
    buttons[i].addActionListener(new ButtonActionListener(i));
  }
//只是一个例子,我不清楚buttons[]数组是如何创建的
对于(int i=0;i