2017-08-12 9 views
0

GUIに複数のJComboBoxを入力したいとします。だから私は引数としてそれぞれJComboBox名前を受け入れるメソッドを使用したいと思います。これは可能ですか?文字列をコンボボックス名として受け入れるメソッドを使用してJComboBoxを生成する方法

cmbCustomers.addItem("customer name"); 

上記のコードでは、cmbCustomersをpopulateメソッドに渡す可能性のある文字列に置き換えたいと思います。

私はpopulateメソッドから文字列引数を渡してcmbCustomersのcomboboxnameを動的に置き換えようとしましたが、実際には不可能と思われます。

JTablesにデータベースのデータを入力するGUIを作っています。 JTableの行を選択すると、JComboBoxesのセットに選択した行のデータが設定されます。ここから、JComboBoxesを使用してデータを変更し、データベースに保存することができます。 JComboBoxesが複数あるので、たくさんのコードが重複しないようにしたいと思います。

+1

あなたは完全なコードを投稿できますか – Akash

+0

あなたの質問は本質的に「どのようにオブジェクトを文字列に関連付けることができますか?」です。 1つの答えは、JComboBoxesとStringのペアを関連付ける 'HashMap 'を使うことです。あなたの質問には、[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)の臭いがあり、特定のコードの問題を解決する方法を尋ねるところです最高の解決策は完全に異なるアプローチを使用することです。現在解決しようとしている方法ではなく、解決しようとしている全体的な問題を教えてください。 –

+0

このリンクドキュメントを参照することができます。http://www.java2s.com/Tutorial/Java/0240__Swing/AddItemstoJComboBox.htm – Akash

答えて

1

一般に、Java変数名はコンパイル時にのみ使用できます。実行時に文字列値を変数名として使用することはできません。代わりに、一般的なオブジェクト指向の原則を使用して問題を解決する必要があります。このケースでは、JComboBoxのパラメータを受け取るメソッドを記述することができます。

private void populateComboBox(JComboBox comboBox) { 
    comboBox.addItem("customer name"); 
    // ... do anything else you wish with the comboBox 
} 

今、あなたはどのJComboBoxので、このメソッドを呼び出すことができます。メソッドに渡されるパラメータの名前は、とは関係ありません。あなたが望むものであれば何でもかまいません。たとえば:

JComboBox cmbCustomers = new JComboBox(); 
populateComboBox(cmbCustomers); 

または

JComboBox cmbOtherCustomers= new JComboBox(); 
populateComboBox(cmbOtherCustomers); 

私は強くあなたがメソッドと参照変数についてあなたはできる限りを学ぶことを示唆しています。これらの概念はJavaプログラミングにとって重要であり、上記の私の提案を理解するのに役立つだけでなく、将来類似の問題を解決するのに役立ちます。

1技術的には、Reflection APIを使用してこれを行うことができます。リフレクションはコードツールのコードイントロスペクションを意図したものであり、標準的な日々のプログラミングではありません。ここで尋ねられるような一般的な問題を解決するためには、それを絶対に使用しないでください。

+0

これまでのところ不完全な質問であることが分かりました。 –

0

なぜ何かのコードネームを動的に作成したいのですか?何か理由があることは非常にまれです。あなたがコンボボックス「box1」または「mybox」と呼んでいれば、どのような違いがありますか?実行時までコンボボックスの変数名がわからない場合は、コンボボックスの内容を操作するコードをどのように記述しますか?

つまり、すべてのコンポーネントに対してsetName()メソッドとgetName()メソッドがあり、いつでもその内部名を変更できます。次に、あなたのようなことを行うことができます。

if (box1.getName().equals(something)) { 
    fillCustomers(box1, customers); 
    } else if (box2.getName().equals(something) { 
    fdillCustomers(box2, customers); 
    } 

確かに、これは特定のコンボボックスであるか、物事の種類の変更に使用するにはかなり貧弱なデザインですが、それを行うことができます。

関連する問題