0

私は大きな学校のプロジェクトに取り組んでおり、それが終わりに近づいています。プログラム内の異なるクラス (JPanels) で 2 つの JComboBox を同期させたいのですが、JComponent がどのように機能するかについてあまり知らなかったので、データを保持しているのは JComboBox 自体ではなく、ComboBoxModel であることがわかりました。

したがって、DefaultComboBoxModel を Register (すべてのデータを保持するクラス) に追加し、それを他の 2 つの JPanel と共有すると、ようやく機能するようになりました。

しかし、Register クラスをファイルに書き込むときに NotSerializable を取得するようになりました。(私は DefaultComboBoxModel を Register クラスから取り出して、すべてが再び機能するようになったので、それが問題であることはわかっています)。

ドキュメントで確認できることは、DefaultComboBoxModel は Serialiazble を実装しており、モデルが保持するオブジェクトも実装しています。

public class Register implements Serializable
{
    ...
    private DefaultComboBoxModel klippPriser;

    public Register()
    {
        ...
        Object[] antTurer = { new KlippPris(5,0), new KlippPris(10,0.05), new KlippPris(15,0.10) };
        klippPriser = new DefaultComboBoxModel(antTurer);
    }

    public DefaultComboBoxModel getKlippPriser()
    {
        return klippPriser;
    }

私の推測では、DefaultComboBoxModel をリストとして使用してオブジェクトを格納し、ファイルに書き込むことはできませんが、それを解決してプログラムを動的に保つ方法がよくわかりません。

問題が明確になったことを願っています。ありがとう。

EDIT2:KlippPrisモデルが保持するクラス 。(問題ではありません

public class KlippPris implements Serializable
{
    private int antall;
    private double rabatt;

    ...
}

EDIT3: 問題は ではなく と にあることがわかりまし。どうしてなのか、まったく理解できません...RegisterSalgAdministrasjon

Salg.java (ほぼ同じ行を使用して管理します。)

public class Salg extends JPanel
{
    private Register register;
    ...
    private JComboBox antTurer;

    public Salg(Register r)
    {
        super();
        register = r;
        gui();
    }

    private void gui()
    {
        ...
        paintKortkjøp();
        ...
    }

    private void paintKortkjøp()
    {
        ...
        // This line cause the exception.
        antTurer = new JComboBox(register.getKlippPriser());

        // This line dosen't cause any problems, but won't let my use my model.
        antTurer = new JComboBox();
    }

なぜこうなった?私はどちらもファイルにも書いていませんSalgAdministrasjon登録簿だけです。私もsetModel()運なしで試しました。

例外が何かを意味するかどうかわからない:

com.apple.laf.AquaComboBoxUI

Java v.6、Mac OSX 10.8.3。

4

1 に答える 1

1

オブジェクトをシリアル化するには、オブジェクトを実装するだけでなくSerializable、すべてのクラス メンバーもシリアル化できる必要があります。シリアル化する必要のないフィールドは、次のように宣言できますtransient

private transient MyUnwrittenType type;
于 2013-04-29T16:26:49.217 に答える