我有问题。
我正在研究另一个人的代码,并且有一个带有大量JSeparator的JFrame(他将它们用作'面板'的边框)现在我正在为一个遵循相同边框样式的JBorderedPanel类替换它们应用
问题是他的一些分隔符不清楚它们在代码中的位置,有很多jSeparator#,替换为0到999之间的任何数字。
除了逐个测试所有jSeparator之外,有没有办法确定哪个变量对应哪个边界?
之前'不要替换它们!'我有义务更换它们。如果可以的话,我不会这样做。
提前致谢。
答案 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历史中最被滥用的组件。最初它的目的是将一小组相关组件组合在一起,通常是复选框或单选按钮。然后有人邀请了标题边框,它变成了懒惰的程序员命名部分的方式,理想情况下应该使用标签和空格来完成。
边框只会增加视觉噪音而不是预期的分离。少即是多。