gpt4 book ai didi

java - 如何在 Java 中复制 Swing 组件及其属性?

转载 作者:行者123 更新时间:2023-11-30 02:11:06 28 4
gpt4 key购买 nike

如何复制 Swing 组件,同时保留其属性?我已经使用 clone() 方法尝试过此操作,但失败并出现错误:

clone() has protected access in java.lang.Object

如何使用代码复制 Swing 组件?

这是我当前的代码:

 public void copy_component() throws CloneNotSupportedException {

Component[] components = design_panel.getComponents();

for (int i = 0; i < components.length; i++) {

boolean enable = components[i].isEnabled();

if (enable == true) {

JButton button = components[i].clone();
design_panel.add(button);
}
}
}

最佳答案

Cloneable 已损坏,不应使用 - 它的架构本质上是错误的,并且它的存在只是出于向后兼容的原因。

现在的正常方法是使用 copy constructor ,您可以在自己的对象上定义它(或者有时定义一个实用方法来克隆单独的对象。)但是,如果您使用许多不同的 Swing 组件,这会有点麻烦。

另一种方法是就地来回序列化对象,这具有创建深度克隆对象的效果。这有点像黑客,仅当对象可序列化时才有效,但由于 Swing 组件符合此描述,因此您可以使用如下内容:

private Component cloneSwingComponent(Component c) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(c);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
return (Component) ois.readObject();
} catch (IOException|ClassNotFoundException ex) {
ex.printStackTrace();
return null;
}
}

关于java - 如何在 Java 中复制 Swing 组件及其属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50101290/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com