我试图找出从大约60个文本字段中读取数据并以间隔行打印的最佳方法。从大量文本字段中获取和打印数据的最佳方法?
例如
的System.out.println(field1.getText()+ “” + field2.getText());
事情是,我不想有一个垃圾负载的getText()方法。
所以我的主要问题是,是否有一个更容易,也许更好(性能明智)的方式来做到这一点?
图片: my text fields
我试图找出从大约60个文本字段中读取数据并以间隔行打印的最佳方法。从大量文本字段中获取和打印数据的最佳方法?
例如
的System.out.println(field1.getText()+ “” + field2.getText());
事情是,我不想有一个垃圾负载的getText()方法。
所以我的主要问题是,是否有一个更容易,也许更好(性能明智)的方式来做到这一点?
图片: my text fields
你可以使用StringBuilder而不是字符串连接以提高性能:
StringBuilder s = new StringBuilder();
s.append(field1.getText()).append(" ")
.append(field2.getText()).append(" ")
.append(field3.getText());
System.out.println(s.toString());
如果你的领域被存储在一个集合中,你可以遍历该集合,而不是调用每个个别字段:
List<JTextField> fields = new ArrayList<JTextField>();
for(int i = 0; i < 30; i++) {
fields.add(new JTextField(Integer.toString(i)));
}
//...
StringBuilder s = new StringBuilder();
for (JTextField t : fields) {
s.append(t.getText()).append(" ");
}
//...
将您的字段添加到数组或集合,然后在for-each循环中遍历它们,打印输出。
跨类使用反射,一些命名约定来识别领域,如正则表达式textField.+
写自己的注释,使其在运行时可保留,和注释您要访问的每一个领域,然后使用反射遍历类字段,检查注释,并在附有注释的情况下打印文本字段的值。
通过良好的命名习惯/模式,2.是最好的。 3.有点重量级,但非常精确和灵活。 1.也是一个快速而轻松的破解。
我想不出任何其他性能更好的方法。
首先,
其次,
你可以尝试使用反射。性能方面它会慢一些,但:
public class Snippet {
JTextField field1 = new JTextField("1");
JTextField field2 = new JTextField("2");
JTextField field3 = new JTextField("3");
JTextField field4 = new JTextField("4");
// add more fields here
public static void main(String[] args) throws Exception {
new Snippet().run();
}
private void run() throws Exception {
for (int i = 1; i <= 4; i += 2) {
JTextField textfieldA = getTextField(i);
JTextField textfieldB = getTextField(i + 1);
System.out.println(textfieldA.getText() + " " + textfieldB.getText());
}
}
private JTextField getTextField(int i) throws NoSuchFieldException, IllegalAccessException {
Field field = Snippet.class.getDeclaredField("field" + i);
JTextField textfield = (JTextField) field.get(this);
return textfield;
}
}
这是快速和肮脏的,从长远来看,你会好起来把你的文本框到合适的数据结构(例如列表或地图),并简单地遍历它。
创建表单时,只需将字段添加到集合(地图,列表或任何自定义结构)。后来只是重复这个......我想这是关于Swing的? – home 2012-02-20 10:18:10