Лучший способ получить и распечатать данные из большого количества текстовых полей? - PullRequest
0 голосов
/ 20 февраля 2012

Я пытаюсь найти наилучший способ прочитать данные из примерно 60 текстовых полей, а затем распечатать их через пробел.

Например

System.out.println (field1.getText () + "" + field2.getText ());

Дело в том, что я не хочу иметь дерьмовую загрузку метода getText ().

Итак, мой главный вопрос: есть ли более простой и, возможно, лучший (с точки зрения производительности) способ сделать это?

Изображение: мои текстовые поля

Ответы [ 4 ]

1 голос
/ 20 февраля 2012

Я не мог придумать какой-либо другой лучший способ повышения производительности.

Во-первых,

  • Используйте массив или список TextField для хранения всех ваших текстовых полей. Затем вы мог бы повторить их, используя цикл for.

Во-вторых,

  • Используйте StringBuilder везде, где это возможно.
1 голос
/ 20 февраля 2012

Вы можете использовать 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 голосов
/ 20 февраля 2012

Вы можете попробовать использовать отражение.С точки зрения производительности это будет медленнее:

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

Это быстро и грязно, и в долгосрочной перспективе вам будет лучше поместить ваши текстовые поля в соответствующую структуру данных (например, List или Map) и просто выполнять итерациинад ним.

0 голосов
/ 20 февраля 2012
  1. Добавьте ваши поля в массив или коллекцию, затем выполните итерации по ним в цикле for-each, распечатывая выходные данные.

  2. Используйте отражение над классом, чтобы идентифицировать поля по некоторому соглашению об именах, например регулярному выражению textField.+

  3. Напишите свою собственную аннотацию, сделайте ее сохраняемой во время выполнения и аннотируйте каждое поле, которое вы хотите посетить, затем используйте отражение, чтобы перебирать поля класса, проверять аннотацию и печатать значение текстового поля, если оно имеет прикрепленную аннотацию.

При хорошем соглашении / схеме именования, 2. лучше всего. 3. немного тяжеловесный, но очень точный и гибкий. 1. это быстрый и легкий взлом тоже.

...