gpt4 book ai didi

java - 我无法选择何时使用 MouseListener 对象

转载 作者:行者123 更新时间:2023-12-01 12:00:27 25 4
gpt4 key购买 nike

抱歉,标题不好,我想不出更好的表达方式。

无论如何,当同一个容器中有两个以上的对象时,我需要我的 JLabel 有一个不同的 MouseListener。我正在尝试制作一个日历程序,以便将这些标签添加到 42 个面板中。当标签太多时,我希望最后一个标签能够打开一个窗口来显示其余标签。

现在,当有超过 2 个标签时,最后一个标签同时具有 if (number_of_labels[index-7]) 内部的 mouseListener声明和来自 if (mouseListenerActive)陈述。

此方法在其他地方循环调用。如果大家还需要看什么,我会补充的。

public static void insertLabel(String text, final int index, Color colour) {
final JLabel label = new JLabel();

label.setText(text);
label.setOpaque(true);
label.setBackground(colour);

mouseListenerActive = true;

if (number_of_labels[index-7] == 2) {
label.setBackground(Color.RED);
JLabel last_label = (JLabel) calendar_boxes[index].getComponent(2);
last_label.setText(" ▼");
last_label.setForeground(Color.WHITE);
last_label.setBackground(Color.BLACK);

mouseListenerActive = false;
last_label.addMouseListener(new MouseListener() {
@Override public void mouseExited(MouseEvent e) {}
@Override public void mouseEntered(MouseEvent e) {}
@Override public void mouseReleased(MouseEvent e) {}
@Override public void mousePressed(MouseEvent e) {}

@Override
public void mouseClicked(MouseEvent e) {
//int day = index - (position of last day - number of days in current month)
int day = index - (Integer.parseInt(monthDataNode.getChildNodes().item(Main.year-1900).getChildNodes().item(Main.month_index-1).getTextContent()) - Constants.month_lengths[Main.month_index-1]);
calendarList.open(day, Main.month_index-1, Main.year);
}
});
} else if (number_of_labels[index-7] > 2) {
return;
}

if (mouseListenerActive) {
label.addMouseListener(new MouseListener() {
@Override public void mouseExited(MouseEvent e) {}
@Override public void mouseEntered(MouseEvent e) {}
@Override public void mouseReleased(MouseEvent e) {}
@Override public void mousePressed(MouseEvent e) {}

@Override
public void mouseClicked(MouseEvent e) {
//int day = index - (position of last day - number of days in current month)
int day = index - (Integer.parseInt(monthDataNode.getChildNodes().item(Main.year-1900).getChildNodes().item(Main.month_index-1).getTextContent()) - Constants.month_lengths[Main.month_index-1]);
calendarEdit.open(day, Main.month_index-1, Main.year, label.getText());
}
});
}

calendar_boxes[index].add(label, new AbsoluteConstraints(19, 6+(15*number_of_labels[index-7]), 40, 12));
number_of_labels[index-7]++;
}

最佳答案

在您的代码中,在添加第二个 MouseListener 之前,请删除第一个。由于您使用的是匿名类并且没有对原始 MouseListener 的引用,因此请使用以下内容:

MouseListener existingListener = last_label.getMouseListeners()[0];
last_label.removeMouseListener(existingListener);

关于java - 我无法选择何时使用 MouseListener 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28014532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com