2012-02-20 43 views
0

我试图找出从大约60个文本字段中读取数据并以间隔行打印的最佳方法。从大量文本字段中获取和打印数据的最佳方法?

例如

的System.out.println(field1.getText()+ “” + field2.getText());

事情是,我不想有一个垃圾负载的getText()方法。

所以我的主要问题是,是否有一个更容易,也许更好(性能明智)的方式来做到这一点?

图片: my text fields

+0

创建表单时,只需将字段添加到集合(地图,列表或任何自定义结构)。后来只是重复这个......我想这是关于Swing的? – home 2012-02-20 10:18:10

回答

1

你可以使用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(" "); 
} 
//... 
+0

这工作!谢谢。但是有一个问题。当它在框中打印数据时,它会继续打印它们。 就像它会再次打印1 1 1 1,然后是1 1 1 1。 – Laszki 2012-02-20 11:03:57

+0

很难知道什么地方出现错误,而没有看到您的代码 - 我建议您编辑您的文章与您的代码的相关部分。此外,如果您投票赞成你认为有用的答案(http://stackoverflow.com/faq#howtoask),将不胜感激。 – assylias 2012-02-20 11:18:23

0
  1. 将您的字段添加到数组或集合,然后在for-each循环中遍历它们,打印输出。

  2. 跨类使用反射,一些命名约定来识别领域,如正则表达式textField.+

  3. 写自己的注释,使其在运行时可保留,和注释您要访问的每一个领域,然后使用反射遍历类字段,检查注释,并在附有注释的情况下打印文本字段的值。

通过良好的命名习惯/模式,2.是最好的。 3.有点重量级,但非常精确和灵活。 1.也是一个快速而轻松的破解。

1

我想不出任何其他性能更好的方法。

首先,

  • 使用文本字段数组或列表来保存所有的文本字段。那么你可以使用for循环来迭代它们。

其次,

  • 使用StringBuilder徘徊无论可能。
0

你可以尝试使用反射。性能方面它会慢一些,但:

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

这是快速和肮脏的,从长远来看,你会好起来把你的文本框到合适的数据结构(例如列表或地图),并简单地遍历它。

相关问题