在项目中需要把之前两个工厂的mes整合在一起,在整合FORM布局风格时,需要调整控件位置,在复制控件后,粘贴时控件名会变化,比如一个按钮原名为buttonAdd,复制粘贴后就变成了button1,这就恶心了.
反编译Client.jar, 找了半天,发现这个类:
com.datasweep.compatibility.formdesigner.DesignPanel
方法
private void handlePaste() {
Clipboard clipboard = getToolkit().getSystemClipboard();
Transferable transferable = clipboard.getContents(this);
if (transferable == null) {
getToolkit().beep();
return;
}
if (this.item == null || !(this.item instanceof CContainer) || this.secItems.size() > 0 || this.item instanceof com.datasweep.compatibility.ui.ActivityControl || this.item instanceof com.rockwell.smartedit.SmartEdit || isActivityControl(this.item)) {
getToolkit().beep();
return;
}
if (isActivityControl(this.item)) {
getToolkit().beep();
return;
}
int i = Thread.currentThread().getPriority();
Thread.currentThread().setPriority(10);
Vector<CComponent> vector = new Vector();
CContainer cContainer = null;
try {
Vector<byte[]> vector1 = (Vector)transferable.getTransferData(dataFlavor);
cContainer = (CContainer)this.item;
this.undoRedoAction = true;
for (byte b = 0; b < vector1.size(); b++) {
CComponent cComponent = CComponent.fromByteArray(vector1.elementAt(b));
vector.add(cComponent);
if (cComponent instanceof CControl) {
if (this.glass.doAddComponent2(cComponent, cContainer))
setSelectedItem(cComponent, (b > 0), false);
} else if (cComponent instanceof com.datasweep.compatibility.ui.INonVisualComponent && this.glass.doAddComponent(cComponent, (CContainer)this.root)) {
setSelectedItem(cComponent, false, false);
}
}
} catch (UnsupportedFlavorException unsupportedFlavorException) {
getToolkit().beep();
} catch (Exception exception) {
getToolkit().beep();
exception.printStackTrace();
} finally {
Thread.currentThread().setPriority(i);
this.undoRedoAction = false;
PasteComponentEdit pasteComponentEdit = new PasteComponentEdit(cContainer, vector);
this.undoSupport.postEdit(pasteComponentEdit);
}
}
public boolean doAddComponent(CComponent param1CComponent, CContainer param1CContainer) {
if (param1CComponent instanceof CControl) {
Dimension dimension = ((CControl)param1CComponent).getPreferredSize();
Point point = ((CControl)param1CComponent).getLocation();
if (point == null)
point = new Point(0, 0);
((CControl)param1CComponent).setBounds(point.x, point.y, dimension.width, dimension.height);
((CControl)param1CComponent).setPreferredSize(new Dimension(dimension.width, dimension.height));
}
createName(param1CComponent);
if (param1CContainer == null || param1CContainer instanceof com.datasweep.compatibility.ui.ActivityControl || DesignPanel.isActivityControl(param1CContainer))
return false;
param1CContainer.add(param1CComponent);
param1CContainer.validate();
if (param1CComponent instanceof CContainer) {
CComponent[] arrayOfCComponent = ((CContainer)param1CComponent).getControls();
if (arrayOfCComponent != null)
for (byte b = 0; b < arrayOfCComponent.length; b++)
doAddComponent(arrayOfCComponent[b], (CContainer)param1CComponent);
}
DesignPanel.AddComponentEdit addComponentEdit = new DesignPanel.AddComponentEdit(param1CContainer, param1CComponent, DesignPanel.this.createSelectionVector());
DesignPanel.this.undoSupport.postEdit(addComponentEdit);
DesignPanel.this.fireComponentAdded(new CContainerEvent((CComponent)param1CContainer, 300, param1CComponent));
return true;
}
在查看代码的过程中发现了
createName(param1CComponent);
把这一行注释掉,打个包
操作步骤同https://blog.csdn.net/weixin_46214043/article/details/119639559
试一下效果
没问题,接下来只需要复制粘贴改位置了,节省了一大半的时间
然后,给项目组同事讲了一下如何使用,干活效率快到飞起