Лучший JavaFx-контейнер для манипулирования длинными строками char by char - PullRequest
0 голосов
/ 23 марта 2019

Я работаю с данными ДНК, в простейшей форме имя / идентификатор с информацией о последовательности:

public class FastaSequence {
    private String name;
    private String sequence;    
{

* sequence в основном ATGGCTATCAC ... для нескольких тысяч символов.У меня также есть несколько сотен таких вещей, которые можно сравнить одновременно.

Мне нужно иметь возможность манипулировать символами в столбцах и ячейках, например, выбирать 125-й символ каждой выровненной последовательности в графическом интерфейсе пользователя, таком как JavaFX.поэтому я подумал использовать TableView и преобразовать sequence в список символов и передать его в табличную модель как таковую.Таким образом, каждый символ получал бы свой собственный столбец, и я мог бы покрасить все ячейки, содержащие T, в красный и т. Д.

Я пробовал это с помощью Python TableView, и я получил рабочий прототип, но он очень медленно реагировал (загрузка списка, обновление), даже если список загружен только из ста последовательностей.Поэтому мой вопрос состоит из двух частей:

1) Будет ли реализация JavaFX (намного) быстрее, чем Python, даже при загрузке сотен или более ячеек?

2) Я лаюнеправильное дерево и есть ли лучший способ для просмотра / манипулирования данными, как я описал выше?Должен ли я использовать другую модель?

ОБНОВЛЕНИЕ

Я провел дополнительные исследования по этому вопросу и обнаружил, что TableView в JavaFX, очевидно, не предназначен для большого количества столбцов.: https://www.youtube.com/watch?v=udc2iRZBF0M в 1: 51.

Итак, я вернулся к тестированию JTable в Swing.Без дальнейшего пуха это дает мне отзывчивую (т.е. легко прокручиваемую) таблицу до 1000 строк из 1000 символов.Однако, делая TableModel немного более сложным и используя собственные средства визуализации ячеек для центрирования символов в ячейке и удаления границ ячейки, это разрушает отзывчивость.Из-за многих вещей, которые я пробовал, я не публикую здесь весь код.Если / когда я подойду ближе к решению, я обновлю свой минимальный (рабочий?) Код.Может быть, мне нужно вернуться к более простому элементу управления, например, к пользовательскому классу, основанному на макете на основе сетки, без издержек JTable и его модели?

1 Ответ

0 голосов
/ 26 марта 2019

Вы можете попробовать что-то вроде этого, чтобы создать массив всех символов в строке:

String sequence = "ATGGCTATCAC";
char[] chars = sequence.toCharArray();

И затем вы можете использовать System.out.println(chars[125]);, чтобы распечатать 125-й символ в этой последовательности.

Я никогда не использовал таблицы в JavaFX раньше, но я думаю, что вы можете сделать что-то вроде этого:

TableColumn column = new TableColumn("Letter");
table.getColumns().add(column);

root.getChildren.add(table);

ObservableList<Character> data = FXCollections.observableArrayList();

for (int i = 0; i < chars.length; i++) {
    data.add(chars[i]);
}

table.setItems(data);
...