0

使用 add 命令创建要添加的对象的副本时,是否可以在 java 中使用?

我得到了这个对象:

JLabel seperator   = new JLabel (EMPTY_LABEL_TEXT);

我补充说:

add (seperator,WEST);

如果我想添加几个这种类型的对象,我想我必须复制它们,有没有办法在 add() 方法中做到这一点,如果没有 - 创建对象副本的最简单方法是什么?我只需要其中的 3 个,所以我不想要任何循环

4

3 回答 3

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();
于 2012-10-28T17:05:51.440 回答
0

我认为 Swing 组件通常不实现Cloneable接口,因此您将不得不为自己制作一个副本或定义您自己MySeparator将使用的类add(new MySeparator());

于 2012-10-28T17:14:01.047 回答
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());
    }
于 2012-10-28T17:27:06.927 回答