我有一个JPanel,绘制为具有特定颜色的矩形。在我的构造函数的JPanel类中,我接受颜色和文本。文本是颜色的名称。
我正在尝试制作一个鼠标监听器,它会在用户点击jpanel后获得jpanel的颜色。有什么建议吗?
我确实将颜色存储在一个变量中,但是我有多个颜色面板,所以当我点击一个面板例如一个黄色面板时,我想检查点击面板是否是某种颜色,如果是这样的话会发生,但我无法弄清楚如何从鼠标监听器获取JPanel源。
答案 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) {
}
}