如何使用JPanel鼠标监听器

时间:2014-12-06 21:18:06

标签: java colors jpanel mouselistener

我有一个JPanel,绘制为具有特定颜色的矩形。在我的构造函数的JPanel类中,我接受颜色和文本。文本是颜色的名称。

我正在尝试制作一个鼠标监听器,它会在用户点击jpanel后获得jpanel的颜色。有什么建议吗?

我确实将颜色存储在一个变量中,但是我有多个颜色面板,所以当我点击一个面板例如一个黄色面板时,我想检查点击面板是否是某种颜色,如果是这样的话会发生,但我无法弄清楚如何从鼠标监听器获取JPanel源。

2 个答案:

答案 0 :(得分:1)

这是如何获取通过鼠标处理程序单击的JPanel的背景颜色(假设鼠标事件处理程序附加到要获取颜色的JPanel):

private void mouseClicked(java.awt.event.MouseEvent evt) {

    JPanel panel = (JPanel)evt.getSource();
    Color c = panel.getBackground();
    System.out.println("color: " + c.toString());

}

<强>解释

mouseClicked方法中,MouseEvent参数evt是一个Object,它包含对鼠标事件“source”的引用(即附加了click事件处理程序的Object) 。如果您知道您只将事件处理程序添加到JPanel对象,那么您可以安全地将getSource()的结果转换为JPanel实例,如示例代码中所示。

然后,您可以对点击事件的JPanel源执行操作,例如getBackground()

答案 1 :(得分:1)

这里有一个完整的类,显示如何打印颜色名称,单击JPanel测试代码

class RectanglePanel extends JPanel implements MouseListener {

String colorName;
Color color;

public RectanglePanel(String text, Color c) {
    this.colorName = text;
    this.color = c;
    super.addMouseListener(this);

}

@Override
public void paint(Graphics g) {

    super.paint(g); //To change body of generated methods, choose Tools | Templates.
    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(color);
    g2.fillRect(50, 50, 100, 100);
}

@Override
public void mouseClicked(MouseEvent e) {
   System.out.println(colorName);
}

@Override
public void mousePressed(MouseEvent e) {

}

@Override
public void mouseReleased(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent e) {

}

@Override
public void mouseExited(MouseEvent e) {

}

}