2016-09-23 10 views
2

私はJavaにはかなり新しいので、私のコードでは小さな問題があります。コードはうまく機能しますが、改善できると感じています。ここでJTextFieldから選択したボタンに基づいてテキストを最適化する

コードです:

if(evt.getStateChange()==1){ 
     String value = "-MyAppArgument "; 
     String temp = CustomARG.getText(); 
     CustomARG.setText(temp+""+value); 
     }else if(evt.getStateChange()!= 1){ 
     String value = "-MyAppArgument "; 
    CustDEVARGSargsTextField.setText(CustDEVARGSargsTextField.getText().replace(value,"")); 
     } 

私は4つのチェックボックスのボタンがあり、それぞれが上記のような引数を持っています。最適化の私の考えは、選択されたボタンに基づいて文字列を作成し、その文字列を実際のプロセスビルダで使用することでしたが、どうすればよいのか分かりません。問題はどのように私はこれを最適化することができます、私のアイデアは良いですか?

答えて

1

もう1つの方法は、チェックされたイベントに応答してパラメータを追加/削除するのではなく、各イベントに応答して文字列を完全に再構築することです。必ずしも「最適化」されているわけではありませんが、最適化するためにこれを本当に必要とするわけではありません。機能しメンテナンスできるだけです。例えば

、擬似コードは(StringBuilderを使用すること自由に感じ、本当に問題ではありません):

void updateParameterString() { 
    String parameterString = ""; // constant params can be initialized here too 
    if (checkbox1 is checked) parameterString += " -arg1"; 
    if (checkbox2 is checked) parameterString += " -arg2"; 
    if (checkbox3 is checked) parameterString += " -arg3"; 
    if (checkbox4 is checked) parameterString += " -arg4"; 
    CustDEVARGSargsTextField.setText(parameterString); // option: trim the string 
} 

void onAnyCheckButtonStateChange() { 
    updateParameterString(); 
} 

このアプローチのもう一つの利点は、あなたが例えば可能ですチェックボックスの作成時にチェック状態を設定し、フォームが表示されたらupdateParameterString()を呼び出して、同じコードのチェックボックスの初期デフォルト値を使用して、パラメータ文字列テキストボックスを初期化します。

上記の他の順列は、最も適切なものに応じて、もちろん可能です。 updateParameterString()を、文字列を生成して返し、代わりに正しい場所で使用するメソッドに置き換えてください。

1

Oracleからの良い例です。

StringBuffer choices; 

フォーアクセサリー選択肢は16個の異なる 組合せを提供します。 StringBufferには、 が現在の選択を示す文字列が含まれています。プロセスのシンボルのchar(c、g、h、t)を変更することができます。また、 "-MyAppArgument"チェックボックスのオン/オフトグル状態に応じて値を設定する固定インデックスが必要なので、定数でなければなりません。

choices = new StringBuffer("cght"); // change it to your postfix 


    ----    //zero accessories 

    c---    //one accessory 
    -g-- 
    --h- 
    ---t 

    cg--    //two accessories 
    c-h- 
    c--t 
    -gh- 
    -g-t 
    --ht 

    -ght    //three accessories 
    c-ht 
    cg-t 
    cgh- 

    cght    //all accessories 

あなたがチェックボックスのすべての項目リスナーを追加することができます:あなたが持っていた場合、また

public void itemStateChanged(ItemEvent e) { 
    int index = 0; 
    char c = '-'; 
    Object source = e.getItemSelectable(); 

    if (source == sampleCheckBox1) { 
     index = 0; 
     c = 'c'; 
    } else if (source == sampleCheckBox2) { 
     index = 1; 
     c = 'g'; 
    } else if (source == sampleCheckBox3) { 
     index = 2; 
     c = 'h'; 
    } else if (source == sampleCheckBox4) { 
     index = 3; 
     c = 't'; 
    } 

    //Now that we know which button was pushed, find out 
    //whether it was selected or deselected. 
    if (e.getStateChange() == ItemEvent.DESELECTED) { 
     c = '-'; 
    } 
    //Apply the change to the string. 
    choices.setCharAt(index, c); 
} 

sampleCheckBox1.addItemListener(this); 
sampleCheckBox2.addItemListener(this); 
sampleCheckBox3.addItemListener(this); 
sampleCheckBox4.addItemListener(this); 

は、次にそれらに耳を傾け、変更 "選択肢"定数の文字列をメインコードの上に追加してください:

final String = "-MyAppArgument "; 
関連する問題