Java SWT代码段2。表排序。循环中的项数组更改。这是怎么回事?
我正在SWT中尝试向表小部件添加排序。从Snippet2Java SWT代码段2。表排序。循环中的项数组更改。这是怎么回事?,java,sorting,swt,code-snippets,Java,Sorting,Swt,Code Snippets,我正在SWT中尝试向表小部件添加排序。从Snippet2sortListener处理程序复制代码无效。它正确地将两个项目交换为排序顺序。表中有两个以上的项目,结果不可预测 在我看来(以下代码摘录自Snippet2sortListener),当一个项目是disposed()时,items[i].dispose()将更改TableItems调用的项目的数组,我们将在外部for循环中对其进行迭代,for(int i=1……),并插入到新索引的项中,整个数组将重新创建。这肯定会中断迭代吗 所以,我想我有
sortListener
处理程序复制代码无效。它正确地将两个项目交换为排序顺序。表中有两个以上的项目,结果不可预测
在我看来(以下代码摘录自Snippet2sortListener
),当一个项目是disposed()时,items[i].dispose()
将更改TableItems
调用的项目的数组,我们将在外部for循环中对其进行迭代,for(int i=1……
)
,并插入到新索引的项中,整个数组将重新创建。这肯定会中断迭代吗
所以,我想我有两个问题:
Listener sortListener = new Listener() {
public void handleEvent(Event e) {
TableItem[] items = table.getItems();
Collator collator = Collator.getInstance(Locale.getDefault());
TableColumn column = (TableColumn)e.widget;
int index = column == column1 ? 0 : 1;
for (int i = 1; i < items.length; i++) { <--------- HERE
String value1 = items[i].getText(index);
for (int j = 0; j < i; j++){
String value2 = items[j].getText(index);
if (collator.compare(value1, value2) < 0) {
String[] values = {items[i].getText(0), items[i].getText(1)};
items[i].dispose(); <--------- HERE
TableItem item = new TableItem(table, SWT.NONE, j);
item.setText(values);
items = table.getItems(); <--------- HERE
break;
}
}
}
table.setSortColumn(column);
}
};
Listener sortListener=newlistener(){
公共无效handleEvent(事件e){
TableItem[]items=table.getItems();
Collator-Collator=Collator.getInstance(Locale.getDefault());
TableColumn=(TableColumn)e.widget;
int index=column==column1?0:1;
对于(inti=1;i
但它只适用于2列。(这是你的问题吗?
如果表中有更多列,则代码如下所示:
Listener sortListener = new Listener() {
public void handleEvent(Event e) {
TableItem[] items = table.getItems();
Collator collator = Collator.getInstance(Locale.getDefault());
TableColumn column = (TableColumn)e.widget;
int index = table.indexOf(column);
for (int i = 1; i < items.length; i++) { // <--------- HERE
String value1 = items[i].getText(index);
for (int j = 0; j < i; j++){
String value2 = items[j].getText(index);
if (collator.compare(value1, value2) < 0) {
String[] values = new String[table.getColumnCount()];
for (int columnIdx = 0; columnIdx < table.getColumnCount();
columnIdx++){
values[columnIdx] = items[i].getText(columnIdx);
}
items[i].dispose(); // <--------- HERE
TableItem item = new TableItem(table, SWT.NONE, j);
item.setText(values);
items = table.getItems(); // <--------- HERE
break;
}
}
}
table.setSortColumn(column);
}
};
Listener sortListener=newlistener(){
公共无效handleEvent(事件e){
TableItem[]items=table.getItems();
Collator-Collator=Collator.getInstance(Locale.getDefault());
TableColumn=(TableColumn)e.widget;
int index=table.indexOf(列);
对于(inti=1;i
但它只适用于2列。(这是你的问题吗?
如果表中有更多列,则代码如下所示:
Listener sortListener = new Listener() {
public void handleEvent(Event e) {
TableItem[] items = table.getItems();
Collator collator = Collator.getInstance(Locale.getDefault());
TableColumn column = (TableColumn)e.widget;
int index = table.indexOf(column);
for (int i = 1; i < items.length; i++) { // <--------- HERE
String value1 = items[i].getText(index);
for (int j = 0; j < i; j++){
String value2 = items[j].getText(index);
if (collator.compare(value1, value2) < 0) {
String[] values = new String[table.getColumnCount()];
for (int columnIdx = 0; columnIdx < table.getColumnCount();
columnIdx++){
values[columnIdx] = items[i].getText(columnIdx);
}
items[i].dispose(); // <--------- HERE
TableItem item = new TableItem(table, SWT.NONE, j);
item.setText(values);
items = table.getItems(); // <--------- HERE
break;
}
}
}
table.setSortColumn(column);
}
};
Listener sortListener=newlistener(){
公共无效handleEvent(事件e){
TableItem[]items=table.getItems();
Collator-Collator=Collator.getInstance(Locale.getDefault());
TableColumn=(TableColumn)e.widget;
int index=table.indexOf(列);
对于(inti=1;i您可能希望对SWT表()使用JFace包装器,这为您的表提供了更多内置功能。我建议您这样做。您是否尝试过调试代码或输出项目数组?我真的认为这会对您有所帮助。您是否尝试过调试代码或输出项目数组?我真的认为这会对您有所帮助。