最好的JavaFx容器,用于按字符处理长字符串char

时间:2019-03-23 18:08:24

标签: javafx jtable tableview

我正在处理DNA数据,最简单的形式是带有序列信息的名称/ id:

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

sequence基本上是ATGGCTATCAC ...,长度为数千个字符。我还可以随时比较其中几百种东西。

我需要能够操纵列和单元格中的字符,例如在JavaFX之类的GUI中选择每个对齐序列的第125个字符,因此我想使用TableView并将sequence转换为字符列表,并将其馈送到表模型中。这样,每个字符都将获得其自己的列,我想将所有包含T的单元格用红色等彩色。

我已经使用Python的TableView进行了尝试,并且得到了一个可以正常工作的原型,但是响应非常慢(加载列表,刷新),即使仅加载了一百个序列的列表也是如此。所以我的问题有两个:

1)即使加载100k或更多的单元格,JavaFX的实现是否也会比Python快很多?

2)我是否吠错了树,是否有更好的方法来查看/操作数据(如上所述)?我应该使用其他模型吗?

更新

我对此进行了更多研究,发现JavaFX中的TableView显然不是为大量列而设计的:https://www.youtube.com/watch?v=udc2iRZBF0M在1:51。

所以我回到了在Swing中测试JTable的过程。没有更多的绒毛,它给了我一个响应能力强(即易于滚动)的表格,最多可容纳1000行1000个字符。但是,使TableModel稍微复杂一点,并使用自定义单元格渲染器将字符置于单元格中并消除单元格边界,从而破坏了响应能力。由于我尝试了很多事情,因此我没有在此处发布所有代码。如果/当我更接近解决方案时,我将使用最少的(有效的)代码进行更新。也许我需要返回一个更简单的控件,例如一个基于网格布局的自定义类,而没有JTable及其模型的开销?

1 个答案:

答案 0 :(得分:0)

您可以尝试执行以下操作,以将字符串中的所有字符组成数组:

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