使用add命令创建添加对象的副本时,是否可以在java中使用?
我有这个对象:
JLabel seperator = new JLabel (EMPTY_LABEL_TEXT);
我补充说:
add (seperator,WEST);
如果我想添加这种类型的几个对象,我想我必须复制它们,有没有办法在add()方法中做到这一点,如果没有 - 什么是创建副本的最简单方法对象?我只需要其中的3个,所以我不想要任何循环
答案 0 :(得分:1)
JLabel separator2 = new JLabel(EMPTY_LABEL_TEXT);
JLabel separator3 = new JLabel(EMPTY_LABEL_TEXT);
是你能做的最好的事情。如果标签在两个副本上都有许多不同的属性,则使用方法创建三个标签,以避免重复相同的代码3次:
JLabel separator = createLabelWithLotsOfProperties();
JLabel separator2 = createLabelWithLotsOfProperties();
JLabel separator3 = createLabelWithLotsOfProperties();
答案 1 :(得分:0)
我认为Swing组件通常不会实现Cloneable
界面,因此您将有义务自行复制或定义您将使用MySeparator
<的add(new MySeparator());
类。 / p>
答案 2 :(得分:0)
没有任何帮助,不直接在add()方法中。 Swing组件是可序列化的,因此编写一个使用ObjectOutputStream和ObjectInputStream复制组件的辅助方法应该相当容易。
编辑:一个简单示例:
public static JComponent cloneComponent(JComponent component) throws IOException, ClassNotFoundException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(bos);
oout.writeObject(component);
oout.flush();
ObjectInputStream oin = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));
return (JComponent) oin.readObject();
}
public static void main(String[] args) throws ClassNotFoundException, IOException {
JLabel label1 = new JLabel("Label 1");
JLabel label2 = (JLabel) cloneComponent(label1);
label2.setText("Label 2");
System.out.println(label1.getText());
System.out.println(label2.getText());
}