1
我有一個JPanel
內的,它位於JFrame
的內部。我使用添加JLabels
for循環穿過顏色的陣列迭代:多個JLabel上的MouseListener不能按預期工作
private JLabel target;
// This is the origin of the first label added.
Point origin = new Point(10, 20);
// This is the offset for computing the origin for the next label.
int offset = 200;
for (int i = 0; i < layerColors.length; i++) {
target = createColoredLabel(layerColors[i], origin, targetIcon);
layeredPane.add(target, new Integer(i));
origin.x += offset;
}
// Create and set up a colored label with icon image.
private JLabel createColoredLabel(Color color, Point origin, ImageIcon icon) {
JLabel label = new JLabel(icon);
label.setVerticalAlignment(JLabel.TOP);
label.setHorizontalAlignment(JLabel.CENTER);
label.setOpaque(true);
label.setBackground(color);
label.setBorder(BorderFactory.createLineBorder(Color.black));
label.setBounds(origin.x, origin.y, 175, 263);
label.addMouseListener(this);
return label;
}
這產生5 JLabels
,與分配給每個相同ImageIcon
,橫跨JPanel
水平方向擴展。每個人都有一個MouseListener
添加到它,但只有最後添加的標籤觸發事件。
@Override
public void mouseClicked(MouseEvent e) {
if (e.getSource().equals(target)) {
Toolkit.getDefaultToolkit().beep();
}
}
我具有涉及含有ImageIcon
尾隨我的光標的標籤,其停止次要問題,當我鼠標移到任何5個標籤。我想這是一個圖層索引問題,但無法解決它。
任何與這些幫助非常感謝謝謝!
究竟是什麼問題?您的鼠標偵聽器只會在最後一個標籤被點擊時發出嗶嗶聲,因爲這是您設置的目標。代碼遠離SSCCE,順便說一句。 – 2010-09-13 15:51:13
質量差的代碼道歉 - 我剛剛開始在軟件開發。我現在看到我的邏輯存在缺陷,謝謝。有關我如何參考它的任何想法,以便點擊時任何標籤都會發出蜂鳴聲? – Frank 2010-09-13 16:18:50
擺脫'e.getSource()。equals(target)'部件,或者存儲一個JLabel數組並循環遍歷它們,檢查它們是否是目標。 – 2010-09-13 16:20:35