首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我很难选择何时使用MouseListener对象

我很难选择何时使用MouseListener对象
EN

Stack Overflow用户
提问于 2015-01-18 20:33:52
回答 1查看 56关注 0票数 0

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

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

现在,当有两个以上的标签时,最后一个标签中既有来自if (number_of_labels[index-7])语句的if (number_of_labels[index-7]),也有来自if (mouseListenerActive)语句的。

此方法在其他地方的循环中调用。如果你还需要看什么,我会加进去的。

代码语言:javascript
复制
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]++;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-18 21:07:08

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

代码语言:javascript
复制
MouseListener existingListener = last_label.getMouseListeners()[0];
last_label.removeMouseListener(existingListener);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28014532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档