Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-重写列表<;列表<;字符串>&燃气轮机;_Java_List_Tableview - Fatal编程技术网

Java-重写列表<;列表<;字符串>&燃气轮机;

Java-重写列表<;列表<;字符串>&燃气轮机;,java,list,tableview,Java,List,Tableview,我想用新值重写我的列表 我正在使用TableView(JavaFX),当我对列重新排序时,数据列表应该得到更新/重写 这是包含数据的表的外观(例如,这里我想用secound列交换第一个): 在这个例子中,我想要1。列包含scond和2的数据。列包含第一个 我写了这段代码,但它不起作用: private ObservableList<List<String>> fnlData; . . tmpListData = new LinkedList<List<Stri

我想用新值重写我的
列表

我正在使用TableView(JavaFX),当我对列重新排序时,数据列表应该得到更新/重写

这是包含数据的表的外观(例如,这里我想用secound列交换第一个):

在这个例子中,我想要1。列包含scond和2的数据。列包含第一个

我写了这段代码,但它不起作用:

private ObservableList<List<String>> fnlData;
.
.
tmpListData = new LinkedList<List<String>>();
tmpListData.addAll(fnlData);
int i = 0;
for (List<String> ls : fnlData){
    int j = 0;
    for (String s : ls){
         s = tmpListData.get(i).get(colOrder[j]);
         j++;
    }
    i++;
}
私有可观察列表fnlData;
.
.
tmpListData=newlinkedlist();
tmpListData.addAll(fnlData);
int i=0;
对于(列表ls:fnlData){
int j=0;
for(字符串s:ls){
s=tmpListData.get(i).get(colOrder[j]);
j++;
}
i++;
}
我收到这个错误:

当我第一次移动列时,除了新的列顺序号是正确的之外,什么也没有发生。 第二次对列重新排序时,出现此错误,列顺序号完全为假

小建议:

外部列表是行,内部列表是列

首先,列的顺序为=0,1,2,3,4


然后,当我对列重新排序时,我将新的顺序保存在colOrder(//=5,0,1,2,3,4)

什么不起作用?名单没有改变吗?还是视图没有更新

如果我假设外部列表表示行,内部列表表示列值,
colOrder
是一个包含类似
colOrder[0]=1
的整数列表,这意味着第一列(数字0)显示列1中的值,那么我会有如下内容:

private ObservableList<List<String>> fnlData;

tmpListData = new LinkedList<List<String>>();

for (List<String> row : fnlData){
    List<String> newRow = new LinkedList<>();
    for (int col : colOrder){
        String value = row.get(col);
        newRow.add(value);
    }
    tmpListData.add(newRow);
}

什么不起作用?名单没有改变吗?还是视图没有更新

如果我假设外部列表表示行,内部列表表示列值,
colOrder
是一个包含类似
colOrder[0]=1
的整数列表,这意味着第一列(数字0)显示列1中的值,那么我会有如下内容:

private ObservableList<List<String>> fnlData;

tmpListData = new LinkedList<List<String>>();

for (List<String> row : fnlData){
    List<String> newRow = new LinkedList<>();
    for (int col : colOrder){
        String value = row.get(col);
        newRow.add(value);
    }
    tmpListData.add(newRow);
}

你确定你真的想更改你的列表吗?您可以将您的列表包装在另一个
列表中,该列表本质上是对元素重新排序的

class ReorderedList<T> extends AbstractList<T> implements List<T> {

    final List<T> l;
    final int[] order;

    public ReorderedList(List<T> l) {
        this.l = l;
        order = new int[l.size()];
        // Start as original list.
        for (int i = 0; i < order.length; i++) {
            order[i] = i;
        }
    }

    @Override
    public T get(int index) {
        // Apply the reorder.
        return l.get(order[index]);
    }

    public void swap(int c1, int c2) {
        int temp = order[c1];
        order[c1] = order[c2];
        order[c2] = temp;
    }

    @Override
    public int size() {
        return l.size();
    }

}

public void test() {
    ReorderedList<String> s = new ReorderedList(Arrays.asList("One", "Two", "Three"));
    System.out.println(s);
    s.swap(0, 1);
    System.out.println(s);

}
类重新排序列表扩展了AbstractList实现列表{
最后清单l;
最终int[]订单;
公共重新排序列表(列表l){
这个。l=l;
订单=新整数[l.大小()];
//从原始列表开始。
for(int i=0;i
您确定要更改列表吗?您可以将您的列表包装在另一个
列表中,该列表本质上是对元素重新排序的

class ReorderedList<T> extends AbstractList<T> implements List<T> {

    final List<T> l;
    final int[] order;

    public ReorderedList(List<T> l) {
        this.l = l;
        order = new int[l.size()];
        // Start as original list.
        for (int i = 0; i < order.length; i++) {
            order[i] = i;
        }
    }

    @Override
    public T get(int index) {
        // Apply the reorder.
        return l.get(order[index]);
    }

    public void swap(int c1, int c2) {
        int temp = order[c1];
        order[c1] = order[c2];
        order[c2] = temp;
    }

    @Override
    public int size() {
        return l.size();
    }

}

public void test() {
    ReorderedList<String> s = new ReorderedList(Arrays.asList("One", "Two", "Three"));
    System.out.println(s);
    s.swap(0, 1);
    System.out.println(s);

}
类重新排序列表扩展了AbstractList实现列表{
最后清单l;
最终int[]订单;
公共重新排序列表(列表l){
这个。l=l;
订单=新整数[l.大小()];
//从原始列表开始。
for(int i=0;i
它不起作用意味着什么?请包括准确的错误或问题以及如何重现。请清楚地描述您的要求,您希望交换前两列本身,或者必须对其余列执行相同的操作。我更新了问题…请停止发布本质上相同问题的细微变化。如果你的问题没有得到满意的回答,很可能是因为没有足够清楚地说明,或者没有提供足够的信息。相反,请返回编辑前一个问题,以提供足够的信息,最好是以A的形式,以获得您需要的答案。James_D这是主要问题,因为我在这里描述得很好,它不起作用意味着什么?请包括准确的错误或问题以及如何重现。请清楚地描述您的要求,您希望交换前两列本身,或者必须对其余列执行相同的操作。我更新了问题…请停止发布本质上相同问题的细微变化。如果你的问题没有得到满意的回答,很可能是因为没有足够清楚地说明,或者没有提供足够的信息。相反,请返回编辑前一个问题,以提供足够的信息,最好是以a的形式提供,以获得您需要的答案。James_D这是主要问题,因为我在这里描述得很好。我更新了问题,看一看。这有点奢侈,但更容易理解的是,你的代码在这一行我得到了相同的错误
String value=row.get(col)?添加一些想法:显然,着色程序大于您的列数。当您创建着色程序时,或者由于表的表示机制,这只是一个失败。我不知道JavaFX表,但是一些表实现使用某种附加的视图模型。因此,更改(添加、删除等)