3

コンストラクターを介してパラメーター化されるクラスがいくつかあります。ユーザーがこれらのパラメーターを指定できるグラフィカル ユーザー インターフェイスを提供する必要があります。クラスについて私が推測できる唯一のことは、コンストラクター (デフォルトまたは引数付き) があることです。

[更新] Aimpl、Bimpl、Cimpl の 3 つのクラス セットがあります。set Aimple のクラスはクラス A を拡張し、Bimpl のクラスはクラス B を拡張し、Cimpl のクラスはクラス C を拡張します。A、B、および C のインスタンスは、データの計算に使用されます。コンパイル時にはどのサブクラスが利用可能か分からないので、実装をスキャンして適切なセットに追加します。エンド ユーザーが計算を適用したい場合は、それをインスタンス化する必要があります。インスタンス化するには、コンストラクターに適切な引数を提供する必要があります。エンド ユーザーはプログラマーであり、配列、抽象クラス、およびインターフェイスを知っています。彼は合理的な議論が何であるかさえ知っています。

最初は、プリミティブ型 (またはプリミティブ型を期待するクラス) のみが想定されていたので、問題なく動作するソリューションを自分で作成しました。しかし今は、配列、抽象クラス、およびインターフェイスを処理する必要があります。そこで、ユーザーに入力フィールドを提供し、入力を抽出してオブジェクトを作成するタスクを簡素化できるライブラリを探しています。

そのようなライブラリがない場合、どうすれば自分でこれを行うことができますか? 配列の場合は JTexFields を使用してから入力を解析し、抽象クラスとインターフェイスの場合は (リフレクション ライブラリを使用して) 拡張/実装クラスをスキャンし、ユーザーが選択できるように JComboBox を提供します。私は GUI のプログラミングに慣れていないので、自分のアプローチが実現可能かどうかを確実に見積もることができず、以前に解決された問題を解決するために時間を無駄にしたくありません。

情報が不足している場合は、お気軽にご指摘ください。

4

1 に答える 1

1

SWoeste の正しいリフレクションは、あなたと同様のタスクを対象としたものですが、使用するのはそれほど簡単ではありません。

実際、あなたの質問はスイング(またはGUI)に関するものではありません。「文字列からオブジェクトを作成する方法」という問題を解決しています。(または、少なくともそれに減らすことができます)。あなたが書いたようにあなたのユーザーがプログラマーである場合、これに対する非常に単純な解決策はJSONを使用することだと思います(私の意見では、非常に単純で理解しやすい形式を使用しているということです)、私のコードはgson 1.6用です。

Person を拡張するオブジェクト、たとえば FullTimeWorker があるとします。

package net.betlista.gson;

public class Person {

    private String name;
    private String surname; // no setter

    public String getName() {
        System.out.println( "Person#getName()" );
        return name;
    }

    public void setName( final String name ) {
        this.name = name;
    }

}

フルタイムワーカー

package net.betlista.gson;

public class FullTimeWorker extends Person {

    private double salary;

}

これで、FullTimeWorker クラスを次のように作成できます。

package net.betlista.gson;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class DeserializationTest {

    public static void main( final String[] args ) {
        final GsonBuilder gb = new GsonBuilder();
        final Gson gson = gb.create();
        // {
        //    "salary": 1234.5,
        //    "name": "John",
        //    "surname": "Doe",
        // }
        final String in = "{\"salary\":1234.5,\"name\":\"John\",\"surname\":\"Doe\"}";
        final FullTimeWorker w = gson.fromJson( in, FullTimeWorker.class );
    }

}

GUI

GUI で今必要なのは、JSON 文字列を挿入するための JTextField (またはより良い JTextArea)、クラス選択のための JComboBox、および JButton だけです。とてもシンプルです。

あなたの GUI がほぼ完璧であることは明らかです - それはあなたの想像力だけに依存しますが、それより単純なものがあるかどうかはわかりません ;-)

于 2012-04-06T10:48:43.157 に答える