如何确定挥杆组件?

时间:2008-12-08 14:12:05

标签: java debugging swing

我有问题。

我正在研究另一个人的代码,并且有一个带有大量JSeparator的JFrame(他将它们用作'面板'的边框)现在我正在为一个遵循相同边框样式的JBorderedPanel类替换它们应用

问题是他的一些分隔符不清楚它们在代码中的位置,有很多jSeparator#,替换为0到999之间的任何数字。

除了逐个测试所有jSeparator之外,有没有办法确定哪个变量对应哪个边界?

之前'不要替换它们!'我有义务更换它们。如果可以的话,我不会这样做。

提前致谢。

7 个答案:

答案 0 :(得分:8)

看看Swing Explorer。这是一个非常方便的摇摆调试工具。有一个Eclipse插件可以动态检测代码并启动。

使用它可以查看swing对象层次结构,右键单击它,并在另一个窗口中渲染它的任何部分,突出显示每个组件并让您查看它们的边界,并选择它们。选择后,您可以右键单击树中的组件并打印一个堆栈跟踪,它将引导您到创建该组件的位置...

答案 1 :(得分:2)

您可以add a color代码中的每个分隔符(绿色,红色,黄色等),并查看这些彩色JSeparator最终在您的应用程序中显示的位置......

答案 2 :(得分:2)

遍历JFrame的子节点并将鼠标侦听器添加到其中的每个JSeparator中:

public void installListeners (java.awt.Container parent) {
    for (Component child: parent.getComponents()) {
        if (child instanceof JSeparator) {
            child.addMouseListener (...
                hover(event);
            }
        }
        if (child instanceof java.awt.Container) {
            installListeners ((java.awt.Container)child);
        }
    }
}

现在实现hover()以将事件源与当前类中的所有字段进行比较,并打印匹配的字段:

public void hover (MouseEvent event) {
    for (Field f: getClass().getFields()) {
        if (f.get(this) == event.getSource()) {
            System.out.println(f.getname());
            break;
        }
    }
}

你必须处理大量的例外情况,但基本上就是这样。

答案 3 :(得分:1)

您可以在每个MouseListener上安装JSeparator。当鼠标进入其区域时,将其背景变为红色并打印标识该对象的线条,最好通过打印其变量名称。这可能需要您更改构造函数调用,但您的IDE应该支持您这样做。

答案 4 :(得分:0)

我想前一个人使用了一些GUI编辑器。

我的第一次尝试将是Netbeans或Eclipse中的GUI编辑器。 他们可以正确地解析和渲染它,除非代码真的很难看。

如果它可以打开,您可以通过在UI上选择它们来追踪它们的位置。

答案 5 :(得分:0)

在这里, 我喜欢你的两个想法,但是所有的jSeparator都是这样初始化的:

  
public JSeparator getJSeparatorArvore01() {
    if (jSeparatorArvore01 == null) {
        jSeparatorArvore01 = new JSeparator();
        jSeparatorArvore01.setLocation(new Point(14, 38));
        jSeparatorArvore01.setSize(new Dimension(72, 10));
    }
    return jSeparatorArvore01;
}
         

如何在超过50个jSeparator上添加鼠标侦听器(或不同颜色),而不花费24小时?     :(

  

答案 6 :(得分:0)

我建议你不要使用边框。边框可能是GUI历史中最被滥用的组件。最初它的目的是将一小组相关组件组合在一起,通常是复选框或单选按钮。然后有人邀请了标题边框,它变成了懒惰的程序员命名部分的方式,理想情况下应该使用标签和空格来完成。

边框只会增加视觉噪音而不是预期的分离。少即是多。