Java 如何确定回转组件?

Java 如何确定回转组件?,java,debugging,swing,Java,Debugging,Swing,我有个问题 我正在处理另一个人的代码,有一个JFrame,其中有很多JSeparator(他将它们用作“面板”的边框),现在我将它们替换为遵循整个应用程序相同边框样式的JBorderedPanel类 问题是,他的一些分隔符无法确定它们在代码中的位置,有很多JSepator#,替换为0到999之间的任何数字 除了逐个测试所有jSeparators之外,还有什么方法可以确定哪个变量对应于哪个边界 在“不要替换它们”之前输入我有义务替换它们。如果可以的话,我不会这么做 提前感谢。您可以在每个jsepa

我有个问题

我正在处理另一个人的代码,有一个JFrame,其中有很多JSeparator(他将它们用作“面板”的边框),现在我将它们替换为遵循整个应用程序相同边框样式的JBorderedPanel类

问题是,他的一些分隔符无法确定它们在代码中的位置,有很多JSepator#,替换为0到999之间的任何数字

除了逐个测试所有jSeparators之外,还有什么方法可以确定哪个变量对应于哪个边界

在“不要替换它们”之前输入我有义务替换它们。如果可以的话,我不会这么做


提前感谢。

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

您可以在代码中的每个分隔符(绿色、红色、黄色等)上单击,然后查看这些彩色JSepator最终在应用程序中显示的位置…

我猜前面的人使用了某种GUI编辑器

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

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

Op here, 我喜欢你的两个想法,但是所有的JSeparator都是这样初始化的:

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

看一看。这是一个非常方便的swing调试工具。Eclipse有一个插件,可以在运行中插入代码并启动


使用它,您可以查看swing对象继承人权限,右键单击它,并在另一个窗口中渲染它的任何部分,该窗口高亮显示每个组件并让您查看它们的边界,以及选择它们。选中后,您可以右键单击树中的组件并打印stacktrace,它将引导您到创建该组件的位置

遍历JFrame的子对象,并将鼠标侦听器添加到JFrame中的每个JSepator中:

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;
        }
    }
}

您将不得不处理大量异常,但基本上就是这样。

我建议您不要过多地使用边框。边框可能是GUI历史上最误用的组件。最初,它旨在将一组非常小的相关组件(通常是复选框或单选按钮)组合在一起。然后有人输入了标题边框它变成了懒惰的程序员命名部分的方式,理想情况下应该使用标签和空格


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

我认为他使用了eclipse GUI编辑器,但上次我尝试使用它时,我不得不重新安装eclipse。我对Swing Explorer的推荐还不够——作者们去年在JavaOne上介绍了它,这是整个会议中最有用的介绍(至少对美国桌面开发人员而言)
public void hover (MouseEvent event) {
    for (Field f: getClass().getFields()) {
        if (f.get(this) == event.getSource()) {
            System.out.println(f.getname());
            break;
        }
    }
}