我有一個JPanel被繪成一個矩形與特定的顏色。在我構造函數中的JPanel類中,我接受一種顏色和文本。文本是顏色的名稱。如何使用JPanel鼠標監聽器
我想讓一個鼠標監聽器在jpanel上點擊一個人後會得到jpanel的顏色。有什麼建議麼?
我確實將顏色存儲在一個變量中,但我有多個顏色面板,所以當我點擊一個面板時,例如一個黃色面板時,我想進行檢查以查看點擊的面板是否爲特定顏色,如果是,則會發生一些事情,但我無法弄清楚如何從鼠標監聽器獲取JPanel源代碼。
我有一個JPanel被繪成一個矩形與特定的顏色。在我構造函數中的JPanel類中,我接受一種顏色和文本。文本是顏色的名稱。如何使用JPanel鼠標監聽器
我想讓一個鼠標監聽器在jpanel上點擊一個人後會得到jpanel的顏色。有什麼建議麼?
我確實將顏色存儲在一個變量中,但我有多個顏色面板,所以當我點擊一個面板時,例如一個黃色面板時,我想進行檢查以查看點擊的面板是否爲特定顏色,如果是,則會發生一些事情,但我無法弄清楚如何從鼠標監聽器獲取JPanel源代碼。
這是如何得到被點擊上通過鼠標處理程序的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()
。
謝謝!我得到的消息來源我想我以後不知道該怎麼做。 – Zac 2014-12-06 21:40:29
這確實假設MouseListener連接到同一個面板;) – MadProgrammer 2014-12-06 21:56:13
@MadProgrammer謝謝,已添加到答案。 – 2014-12-06 23:37:03
這裏是一個完整的類展示如何打印顏色命名的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) {
}
}
一般不建議在執行自定義繪畫時重寫繪畫 – MadProgrammer 2014-12-06 21:52:47
你能更具體與哪個部分導致了問題?你不能只將顏色存儲在變量中嗎? – 2014-12-06 21:23:33
我更新了說明。希望能夠解決問題 – Zac 2014-12-06 21:26:45