我正在处理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及其模型的开销?
答案 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);