2016-09-23 7 views
2

저는 자바를 처음 접했고 코드에 작은 문제가 있습니다. 코드는 잘 작동하지만 개선 할 수 있다고 생각합니다. 각 위의 같은 인수를 가지고, 내가 4 개 확인란 버튼이선택된 버튼을 기반으로하는 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,"")); 
     } 

:

여기에 코드입니다. 최적화에 대한 내 아이디어는 선택된 버튼을 기반으로 문자열을 만들고 실제 processbuilder에서 문자열을 사용하는 것이지만 어떻게 할 수 있는지 잘 모르겠습니다. 문제는 어떻게하면 이것을 최적화 할 수 있겠습니까? 제 생각은 좋은가요?

답변

1

또 다른 옵션은 checked 이벤트에 대한 응답으로 매개 변수를 추가/제거하는 대신 각 이벤트에 대한 응답으로 처음부터 문자열을 완전히 다시 작성하는 것입니다. 꼭 "최적화 된"것은 아니지만 최적화가 필요하지는 않습니다. 단지 기능과 유지 보수가 필요합니다. 이 방법의 또 다른 장점은

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(); 
} 

입니다

당신은 예를 들어, 할 수 있습니다

예를 들어

, 의사 코드 (A StringBuilder를 자유롭게 사용은하지 정말 문제가 않습니다) 체크 박스를 만들 때 체크 상태를 설정 한 다음 폼이 표시 될 때 updateParameterString()을 호출하여 동일한 코드가있는 체크 상자의 초기 기본값을 사용하여 매개 변수 문자열 텍스트 상자를 초기화합니다.

가장 적절한 것에 따라 상기의 다른 순열이 물론 가능하다. updateParameterString()을 대신 문자열을 생성하여 반환하고 올바른 위치에서 대신 문자열을 사용하는 방법으로 바꾸십시오.

1

좋은 예 : Oracle.

StringBuffer choices; 

네 액세서리 선택은 16 개 가지 조합을 제공한다. "choices"StringBuffer는 이 현재 선택을 나타내는 문자열을 포함합니다. 프로세스의 심볼에서 char (c, g, h, t)를 변경할 수 있습니다. 또한 "-MyAppArgument"와 같은 후미가 필요할 경우 추가 할 수 있습니다 체크 박스의 on/off 토글 상태에 따라 값을 넣을 고정 인덱스가 필요하기 때문에 일정해야합니다.

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 

당신은 모든 확인란에 항목 청취자를 추가 할 수 있습니다

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

그런 다음 그들에게 듣고 변화 "선택"

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); 
} 

을 또한, 당신이 있다면 상수 문자열은 다음과 같이 주 코드 위에 추가하십시오.

final String = "-MyAppArgument ";