【问题标题】:Java - Swing / AWT ComponentListener unexpected behaviourJava - Swing / AWT ComponentListener 意外行为
【发布时间】:2010-03-29 22:53:48
【问题描述】:

ComponentListener 出现问题。我用它来检查某个组件是否被调整了大小,如果是的话,我会更新一些东西。

代码看起来像这样,虽然这可能对你没有多大用处:

@Override
public void componentResized(ComponentEvent e) {
    // Graph resized, reposition slice nodes
    Component c = e.getComponent();
    if (graphHeight > 0) {
        if (c == graph) {
            int offset = (c.getHeight() - graphHeight) / 2;
            if (offset != 0) {
                try {
                    controller.shiftSlice1NodesY(offset);
                } catch (GraphIntegrityException e1) {
                    logger.error(e1.getMessage(), e1);
                }
                graphHeight = c.getHeight();
            }
        }
    } else {
        graphHeight = c.getHeight();
    }
}

对于我的代码的一部分,我需要禁用此侦听器。看起来像这样:

    graph.removeComponentListener(this);

    controller.parseFile(filename);

    graph.addComponentListener(this);

在我再次添加组件侦听器之前,一切都很顺利。此时 componentResized 方法被调用了大约 20 次。它可能缓冲了我所看到的调整大小事件。有人知道这里发生了什么吗?

【问题讨论】:

    标签: java swing awt


    【解决方案1】:

    看起来您正试图从事件调度线程 (EDT) 中修改组件。这在 AWT 中甚至都不是一个好主意,更不用说 Swing。

    除了在正确的线程上获取所有 AWT/Swing 内容之外,修复的一部分应该是获取侦听器检查状态以查看它是否应该执行其主体,而不是尝试删除和添加侦听器。

    【讨论】:

    • 我会看看这个 EDT 的东西。第二个建议很好,谢谢!
    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    相关资源
    最近更新 更多