5

私は現在、プログラミングの基礎と基本的なJavaプログラミングのセルフヘルプガイドとして、Eclipse上のJavaでアプリケーションを構築しています。これは純粋に教育的なものであり、トピックを簡単に参照し、プログラミングによって学習しながらプログラミングを実践できるようにすることを唯一の目的としています。このチュートリアルアプリケーションに。

アプリケーションのコンテンツは、時間が経つにつれて、そしてプログラミングのより多くのコンポーネントを学ぶにつれて拡張されます。

だから私の最初の質問は正しい形になります。

JComboBoxGUI内から特定のトピックを選択するために、ドロップダウンボックス()を使用しています。リストにデータを入力し、プログラムをクリーンで整頓したままにしておきたいと思います。JComboBoxだから私の質問は、雑然としたコードを制限するためにどのようにデータを入力するのかということです。おそらく、トピックを個別に追加してより効率的に編集できるテキストファイルですか?私はそれを行うことができるすべての方法とは対照的に、正しいプログラミング手順を求めています。を使用できることはわかっていますがArrayList、コンテンツをごくわずかではなく大量に使用する場合の選択を理解したいと思っています。

ありがとう、

サイモン

4

3 に答える 3

4

最もクリーンな方法は、カスタムComboBoxModelを定義することだと思います。

このようにして、コンボボックスのデータモデルを定義し、コンボボックスが作成される部分をデータ管理自体から分離することができます。

新しいエントリが挿入されたときにコードを変更する必要がないため、おそらくテキストファイルを使用することは良いことです。ComboBoxModelコンストラクター内でファイルの読み取りプロシージャを定義できます。このようにして、プログラムを実行するたびに、更新されたコンボボックスの内容が見つかります。

アプリケーション自体でコンテンツを更新できない場合は、ArrayListは適切な選択ではありません。配列リストの内容をハードコーディングしている場合は、新しいエントリを追加する必要があるたびにコードを変更する必要があります。

ちょっとした例:

class YourModel implements ComboBoxModel{

//implements all interface methods required...
@override
public YourModel(String filename)
{
    comboBoxItemList = new ArrayList<String>();
    // open your file
    // add every entry to the the list
}
@override
public Object getElementAt(int index)
{
    return comboBoxItemList.get(index);
}
List<String> comboBoxItemList;
}

必要なものを記述したら、コードを変更する必要はありません。また、同じモデルを複数の異なるJComboBoxに使用することもできます。

YourModel model = new YourModel("path_to_a_file");
JComboBox box1 = new JComboBox();
box1.setModel(model);
JComboBox box2 = new JComboBox();
box2.setModel(model);
于 2012-06-25T09:29:47.553 に答える
2

コンボボックスにデータを入力する最も簡単な方法は(Javaドキュメントに記載されているように)次のとおりです。

String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
//Create the combo box, select item at index 4.
//Indices start at 0, so 4 specifies the pig.
JComboBox petList = new JComboBox(petStrings);

ただし、これは最善の選択肢ではありません。コンボボックスに文字列の配列を入力することは、柔軟性とモデル/UIデカップリングを提供する最良のオプションではありません。ここでMVCモデルが登場します。MVCモデルは基本的に、モデル(この場合はa ComboBoxModel)を使用してデータをバックアウトするように指示します。モデルがあると、必要な場所(ファイル、ソケット、Webサービスなど)からデータを取得できる可能性と柔軟性が得られます。

于 2012-06-25T09:49:33.663 に答える
0

カスタムComboBoxModelを使用する別の方法は、JGoodiesBindingを使用してビューをビューモデルにバインドすることです。これを行うと、ビューモデルにはビュー固有のコードは含まれませんが、標準のJava Beanメカニズム(プロパティ変更サポートなど)を使用してオンデマンドでビューを更新し、Beanプロパティを介してすべてのビュー更新を自動的に受信します。表示されるデータが実際にどこから来ているか(この例では、Java列挙型から直接来ている)は、ビューの実装には関係ありません。次に例を示します。

class View {
    private JComboBox chatPresenceCombo = new JComboBox();

    public bind(ViewModel viewModel) {
        BeanAdapter<ViewModel> beanAdapter = new BeanAdapter<ViewModel>(viewModel, true);
        Bindings.bind(chatPresenceCombo, new SelectionInList<ChatPresence>(viewModel.getChatPresenceValues(),
                beanAdapter.getValueModel(ViewModel.PROPERTY_CHAT_PRESENCE)));
    }
}

class ViewModel
{
    private ChatPresence chatPresence;

    private final PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);

    public static final String PROPERTY_CHAT_PRESENCE = "chatPresence";

    public ChatPresence getChatPresence() {
        return chatPresence;
    }

    public void setChatPresence(ChatPresence chatPresence) {
        ChatPresence old = this.chatPresence;
        this.chatPresence = chatPresence;
        changeSupport.firePropertyChange(PROPERTY_CHAT_PRESENCE, old, chatPresence);
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.removePropertyChangeListener(listener);
    }

    public ChatPresence[] getChatPresenceValues() {
         return ChatPresence.values();
    }
}

public enum ChatPresence {
    //....
}
于 2012-06-25T10:09:25.537 に答える