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表,但是一些表实现使用某种附加的视图模型。因此,更改(添加、删除等)