基于 JTextField 的选定按钮优化文本
Optimizing text from JTextField based selected buttons
我是 java 的新手,我的代码有一个小问题。该代码运行良好,但我觉得它可以改进。
代码如下:
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 个复选框按钮,每个按钮都有一个与上面类似的参数。我的优化想法是根据选定的按钮构造一个字符串并在实际的 processbuilder 中使用该字符串,但我不确定我该怎么做。问题是如何优化这个,我的想法好吗?
来自 Oracle 的好例子。
StringBuffer choices;
Four accessory choices provide for 16 different
combinations.
The "choices" StringBuffer contains the string that
indicates the current selection.You can change chars (c,g,h,t) on your symbols for process.Also,if you need postfix like "-MyAppArgument " you could add it,but it must be constant,because we need some fixed indexes to put our values depending on on/off toggle status of checkboxes.
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);
然后听他们说改"choices":
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 ";
另一种选择是,不是添加/删除参数来响应选中的事件,而是从头开始完全重建字符串以响应每个事件。不一定 "optimized" 但你并不真的需要对其进行优化,你只需要它能够运行并可维护即可。
例如,伪代码(随意使用 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()
替换为仅生成和 returns 字符串的方法,并在正确的位置使用它。
我是 java 的新手,我的代码有一个小问题。该代码运行良好,但我觉得它可以改进。
代码如下:
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 个复选框按钮,每个按钮都有一个与上面类似的参数。我的优化想法是根据选定的按钮构造一个字符串并在实际的 processbuilder 中使用该字符串,但我不确定我该怎么做。问题是如何优化这个,我的想法好吗?
来自 Oracle 的好例子。
StringBuffer choices;
Four accessory choices provide for 16 different combinations. The "choices" StringBuffer contains the string that indicates the current selection.You can change chars (c,g,h,t) on your symbols for process.Also,if you need postfix like "-MyAppArgument " you could add it,but it must be constant,because we need some fixed indexes to put our values depending on on/off toggle status of checkboxes.
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);
然后听他们说改"choices":
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 ";
另一种选择是,不是添加/删除参数来响应选中的事件,而是从头开始完全重建字符串以响应每个事件。不一定 "optimized" 但你并不真的需要对其进行优化,你只需要它能够运行并可维护即可。
例如,伪代码(随意使用 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()
替换为仅生成和 returns 字符串的方法,并在正确的位置使用它。