0

我正在创建一个程序,但我现在卡住了,我希望干旱板的瓷砖在突出显示时会发出另一种颜色,但我对 Actionlistners 不太好,有人可以帮我吗?

我使用了几个类文件,这是每个类文件的代码。

这是一项统一的工作,所以当我学习时,我不希望将代码提供给我,而是继续使用一些片段和有用的建议。类文件中的代码我认为由于错误而无法编译,因为我还不知道如何使用 actionlistners 或 mouselisteners。

总而言之,当我的鼠标悬停在游戏板上并且瓷砖改变颜色时,我需要一个动作监听器。

因为我只能发布 2 个链接,所以我将在这里给出 3 个最短的类文件。

编辑:为方便起见,我已经摆脱了链接。 编辑 2:如果这似乎是一个初学者的问题,我也很抱歉,因为我是初学者。 编辑 3我已经编辑了 Jframe 类以接受鼠标侦听器现在我需要帮助更改图块的颜色,如何从此类文件中更改颜色?

编辑 4好的,我将颜色变量编辑为公共我想如果这就是你的意思,我还添加了你的代码,但我不知道哪个类是我的鼠标监听器,我不知道如何以你的方式添加颜色大部头书。

编辑 5好的,我绑着让这个 SSCCE 不确定我是否能够做到,这是你的意思吗?如果是这样,可以帮助我吗?

import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;

public class Board extends JPanel 
{

private void setupPieces(int numRows)
{
int numPieces = ((numRows * numRows) - (2 * numRows)) / 4;
for (int i = 0; i < numPieces; i++)


{
    DraughtsPiece p = new DraughtsPiece(DraughtsPiece.LIGHT_PIECE_COLOUR);
    lightPieces.add(p);

    p = new DraughtsPiece(DraughtsPiece.DARK_PIECE_COLOUR);
    darkPieces.add(p);




    DraughtsPiece p = new DraughtsPiece(DraughtsPiece.LIGHT_PIECE_COLOUR);
    lightPieces.add(p);

     p = new DraughtsPiece(DraughtsPiece.DARK_PIECE_COLOUR);
     P.addMouseListener(new <Board.class>);
    darkPieces.add(p);

     }

     public void mouseEntered(MouseEvent m){
      ((DraughtsPiece) m.getSource()).color=<highlight color goes here>;
  }

  public void mouseExited(MouseEvent m){
      ((DraughtsPiece) m.getSource()).color=<normal color goes here>;
  }
  }

  darkPieces.add(p);
}

}

}
4

1 回答 1

1

对于悬停,您不需要 ActionListener。ActionListener 仅用于单击 JButton、JMenuItem 等。如果您实现 MouseListener,那么只要鼠标进入或退出您的其中一个部分,就会调用mouseEntered(MouseEvent)和方法。mouseExited(MouseEvent)

编辑:针对您的评论,您可以尝试在 DraughtsBoard.setupPieces 方法中使用此代码:

编辑 2:我认为您在鼠标悬停后需要重新绘制,但我不确定,因为您删除了很多代码。我添加了代码以在一块颜色更改后重新绘制电路板。

      DraughtsPiece p = new DraughtsPiece(DraughtsPiece.LIGHT_PIECE_COLOUR);
      lightPieces.add(p);

      p = new DraughtsPiece(DraughtsPiece.DARK_PIECE_COLOUR);
      p.addMouseListener(new MouseAdapter(){
          public void mouseEntered(MouseEvent m){
              ((DraughtsPiece) m.getSource()).color=<highlight color goes here>;
              DraughtsBoard.this.repaint(); // see my note
          }
          public void mouseExited(MouseEvent m){
              ((DraughtsPiece) m.getSource()).color=<normal color goes here>;
              DraughtsBoard.this.repaint();
          }
      });
      darkPieces.add(p);

并公开 DraughtsPiece.color。

注意:您只能在像这样的内联类中使用 DraughtsBoard.this。如果您决定不偷懒并且实际上让 DraughtsPiece 实现 MouseListener,那么您将需要一些其他方法来访问 DraughtsBoard,例如保存它的实例的公共静态变量

MouseAdapter 是 MouseListener 的扩展,它使所有扩展类不必实现 MouseListener 的所有方法。这意味着我可以只实现 mouseEntered 和 mouseExited 并省去 MouseListener 中我不需要的其他方法。

于 2013-04-18T21:33:14.127 回答