2016-05-08 6 views
0

У меня есть массив объектов, и я хочу распечатать их в TextArea в программе JavaFX. Я не уверен, как это сделать. Все, что я пытаюсь сделать, не работает.Object Array to TextArea

for(int i = 0; i < set.getEngCourse().length; i++){ 
txt.append(set.getEngCourse()[i]); 
if(i != set.getEngCourse().length -1){ 
    txt.append("\n"); 
} 

taken = new TextArea(txt.toString()); 

Объект im, пытающийся попасть на TextArea, представляет собой пару объектов курса.

+0

Является ли объект 'txt'' StringBuilder'? – KevinO

+0

Просто строка. должно ли это быть? –

+1

Ваш код отсутствует a} –

ответ

1

Есть некоторые предположения, которые необходимо сделать, поскольку не весь код отправлен. Предположим, что set.getEngCourse() правильно возвращает массив некоторого Object и set не может быть нулевым, а .getEngCourse() возвращает как минимум пустой массив, а не null, если нет курсов (если любое из этих допущений может быть нарушено, добавьте соответствующие нулевые проверки). Было бы лучше, если бы возвращаемый массив имел определенный тип (например, EngCourse), но код OP не уточняет, что находится в массиве.

Я хотел бы подойти к решению таким образом, подобное приведенному ниже:

StringBuilder txt = new StringBuilder(); // get something to collect the output 

for (Object obj : set.getEngCourse) { // If possible, change Object to the specific type 
    // add a line break if we have already added something, 
    if (txt.length() > 0) { 
    txt.append("\n"); 
    } 
    txt.append(String.valueOf(obj)); // will handle null objects 
} 

taken = new TextArea(txt.toString()); // assumes taken is declared elsewhere 

Если есть известный тип объекта, было бы лучше, чтобы:

  • переопределять .toString() на объекте тип
  • Использование конкретного типа объекта в итерации

    for (EngCourse ec : set.getEngCourse()) { //use specific type 
    ... 
    txt.append(ec.toString()); //technically, the .toString() is not needed 
    } 
    

Кроме того, если .getEngCourse() возвращает несколько объектов, я бы рекомендовал изменение названия на .getEngCourses(), чтобы понять, что она возвращается N курсы, а не только один курс.

Если нет необходимости в TextArea, я бы также рассмотрел возможность использования JList или чего-то подобного. В принципе, сброс всего на TextArea просто дает результат, без большой возможности сделать что-либо еще с ним (например, выбрать конкретный курс для будущих операций). Рассмотрим, например, этот ответ SO Java JList model. В сущности моделировать домен с использованием соответствующих классов, а затем использовать подход model/view/controller для отображения классов домена, а не думать о домене как о существительных объектах String.

+0

Это было не так, но очень близко. Дал мне хороший прыжок. Я получил это благодаря работе :) –

0

Является ли ваш объект txt строкой? Если да, то почему вы помещаете txt.toString в последнюю строку вашего фрагмента?

Вы можете использовать функцию setText для отображения содержимого в текстовой области.

Сообщите об ошибке или проблеме более конкретно и расширьте фрагмент кода, чтобы узнать область действия цикла.

+0

Я не могу использовать setText. Я пытаюсь получить массив объектов в textArea. Цикл - это то, что я использовал, чтобы прочитать массив и попытаться распечатать его в текстовой области. –

+0

Каков тип txt? И какая ошибка вы получаете? – Sahir

+0

NPE на txt.append (комплект.getEngCourse() [I]); и я изменил его на StringBuilder –