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);

is the best you can do. If the label has many different properties that you want to have on both copies, then use a method to create the three labels, to avoid repeating the same code 3 times:

JLabel separator = createLabelWithLotsOfProperties();
JLabel separator2 = createLabelWithLotsOfProperties();
JLabel separator3 = createLabelWithLotsOfProperties();
于 2012-10-28T17:05:51.440 に答える
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 に答える
0

Swing コンポーネントは一般的にインターフェイスを実装していないと思うCloneableので、自分でコピーを作成するか、使用する独自のMySeparatorクラスを定義する必要があります。add(new MySeparator());

于 2012-10-28T17:14:01.047 に答える