Java - 如何使用鼠标侦听器突出显示正方形。 (使用jframe)

时间:2013-04-18 21:02:02

标签: java swing jframe paint actionlistener

我正在创建一个程序而且我暂时陷入困境我希望干扰板的瓷砖在突出显示时发出另一种颜色但是我对动作列表器不太好可以帮助我吗?

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

这是单方面的工作因此我在学习我不希望给我的代码而是一些片段和有用的建议继续。类文件中的代码我认为由于错误而无法编译,因为我还不知道如何使用actionlistners或mouselisteners。

总结一下,当鼠标悬停在游戏板上并且瓷砖改变颜色时,我需要一个动作滑动器。

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

编辑:为了方便我摆脱了链接。 EDIT 2 :我也很抱歉,如果这看起来像是一个问题,我很想问,因为我是初学者。 编辑3 我已经编辑了Jframe类以接受鼠标监听器现在我需要帮助改变磁贴的颜色,我如何从这个类文件中获取颜色?

编辑4 确定我将颜色变量编辑为公开我认为如果这就是你的意思,我也添加了你的代码,但我不知道哪个类是我的mouselistener而且我不知道如何添加那种颜色就像你对我说的那样。

编辑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);
}

}

}

1 个答案:

答案 0 :(得分:1)

对于悬停,您不需要ActionListener。 ActionListeners仅用于对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中我不需要的其他方法。