我試圖找出從大約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