2012-02-20 42 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; 
    } 
} 

這是快速和骯髒的,從長遠來看,你會好起來把你的文本框到合適的數據結構(例如列表或地圖),並簡單地遍歷它。

相關問題