2014-12-06 151 views
0

我有一個JPanel被繪成一個矩形與特定的顏色。在我構造函數中的JPanel類中,我接受一種顏色和文本。文本是顏色的名稱。如何使用JPanel鼠標監聽器

我想讓一個鼠標監聽器在jpanel上點擊一個人後會得到jpanel的顏色。有什麼建議麼?

我確實將顏色存儲在一個變量中,但我有多個顏色面板,所以當我點擊一個面板時,例如一個黃色面板時,我想進行檢查以查看點擊的面板是否爲特定顏色,如果是,則會發生一些事情,但我無法弄清楚如何從鼠標監聽器獲取JPanel源代碼。

+1

你能更具體與哪個部分導致了問題?你不能只將顏色存儲在變量中嗎? – 2014-12-06 21:23:33

+0

我更新了說明。希望能夠解決問題 – Zac 2014-12-06 21:26:45

回答

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是包含於鼠標事件的「源」的引用的對象(即具有連接到它的點擊事件處理程序的對象。)。如果您知道只添加了事件處理程序到JPanel對象,那麼您可以安全地將getSource()的結果轉換爲JPanel實例,如示例代碼中所示。

然後,您可以對Click事件的JPanel源執行操作,例如getBackground()

+0

謝謝!我得到的消息來源我想我以後不知道該怎麼做。 – Zac 2014-12-06 21:40:29

+0

這確實假設MouseListener連接到同一個面板;) – MadProgrammer 2014-12-06 21:56:13

+0

@MadProgrammer謝謝,已添加到答案。 – 2014-12-06 23:37:03

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) { 

} 

}

+1

一般不建議在執行自定義繪畫時重寫繪畫 – MadProgrammer 2014-12-06 21:52:47