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