Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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_Swt_Jface_Nebula - Fatal编程技术网

Java 使用视距支持从星云网格中移除柱时出现错误

Java 使用视距支持从星云网格中移除柱时出现错误,java,swt,jface,nebula,Java,Swt,Jface,Nebula,我正在尝试处理列并将新列添加到Nebula网格中,表中的数据不会更改,我只是希望能够更改使用的列 我遇到了一个错误,网格在遍历现有列列表时抛出索引越界异常,但使用值“endColumnIndex”停止循环,但endColumnIndex值大于新列列表 我相信这是由于使用了可视范围支持,并且在删除当前屏幕列时,没有更新当前屏幕列的值 我在这里编写了一个类来重现这个bug,希望有人能解决这个问题: import org.eclipse.nebula.jface.gridviewer.GridTabl

我正在尝试处理列并将新列添加到Nebula网格中,表中的数据不会更改,我只是希望能够更改使用的列

我遇到了一个错误,网格在遍历现有列列表时抛出索引越界异常,但使用值“endColumnIndex”停止循环,但endColumnIndex值大于新列列表

我相信这是由于使用了可视范围支持,并且在删除当前屏幕列时,没有更新当前屏幕列的值

我在这里编写了一个类来重现这个bug,希望有人能解决这个问题:

import org.eclipse.nebula.jface.gridviewer.GridTableViewer;
import org.eclipse.nebula.jface.gridviewer.GridViewerColumn;
import org.eclipse.nebula.widgets.grid.GridColumn;
import org.eclipse.nebula.widgets.grid.GridItem;
import org.eclipse.nebula.widgets.grid.GridVisibleRangeSupport;
import org.eclipse.nebula.widgets.grid.GridVisibleRangeSupport.RangeChangedEvent;
import org.eclipse.nebula.widgets.grid.GridVisibleRangeSupport.VisibleRangeChangedListener;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class GridRangeChangeBug {


    public static void main(String[] args) {
        Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setSize(800, 800);

        shell.setLayout(new GridLayout(1, true));

        Button go = new Button(shell, SWT.PUSH);
        go.setText("Reproduce Bug");

        final GridTableViewer viewer = new GridTableViewer(shell, SWT.H_SCROLL
                | SWT.V_SCROLL | SWT.BORDER);
        viewer.getGrid().setLayoutData(
                new GridData(SWT.FILL, SWT.FILL, true, true));
        viewer.getGrid().setHeaderVisible(true);

        GridVisibleRangeSupport rangeSupport = GridVisibleRangeSupport.createFor(viewer.getGrid());
        rangeSupport.addRangeChangeListener(new VisibleRangeChangedListener() {

            @Override
            public void rangeChanged(RangeChangedEvent event) {


            }
        });


        for (int i = 0; i < 100; i++) {
            GridViewerColumn col = new GridViewerColumn(viewer, SWT.NONE);
            col.getColumn().setWidth(30);
            col.getColumn().setText("" + i);
        }

        go.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                for (GridColumn c : viewer.getGrid().getColumns()) {
                    c.dispose();
                }
                for (int i = 0; i < 10; i++) {
                    GridViewerColumn col = new GridViewerColumn(viewer,
                            SWT.NONE);
                    col.getColumn().setWidth(30);
                    col.getColumn().setText("" + i);
                }
            }

        });

        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

}
import org.eclipse.nebula.jface.gridviewer.GridTableViewer;
导入org.eclipse.nebula.jface.gridviewer.GridViewerColumn;
导入org.eclipse.nebula.widgets.grid.GridColumn;
导入org.eclipse.nebula.widgets.grid.GridItem;
导入org.eclipse.nebula.widgets.grid.GridVisibleRangeSupport;
导入org.eclipse.nebula.widgets.grid.GridVisibleRangeSupport.RangeChangeEvent;
导入org.eclipse.nebula.widgets.grid.GridVisibleRangeSupport.VisibleRangeChangedListener;
导入org.eclipse.swt.swt;
导入org.eclipse.swt.events.SelectionAdapter;
导入org.eclipse.swt.events.SelectionEvent;
导入org.eclipse.swt.events.SelectionListener;
导入org.eclipse.swt.layout.GridData;
导入org.eclipse.swt.layout.GridLayout;
导入org.eclipse.swt.widgets.Button;
导入org.eclipse.swt.widgets.Display;
导入org.eclipse.swt.widgets.Shell;
公共类GridRangeChangeBug{
公共静态void main(字符串[]args){
显示=新显示();
最终外壳=新外壳(显示);
外壳设置尺寸(800800);
setLayout(新的GridLayout(1,true));
按钮go=新按钮(外壳,SWT.PUSH);
go.setText(“复制错误”);
最终GridTableViewer=新的GridTableViewer(shell,SWT.H_滚动
|SWT.V|U卷轴(SWT.边框);
viewer.getGrid().setLayoutData(
新的GridData(SWT.FILL,SWT.FILL,true,true));
viewer.getGrid().setHeadServiceable(true);
GridVisibleRangeSupport rangeSupport=GridVisibleRangeSupport.createFor(viewer.getGrid());
rangeSupport.addRangeChangeListener(新的VisibleRangeChangeListener(){
@凌驾
公共无效rangeChanged(RangeChangeEvent事件){
}
});
对于(int i=0;i<100;i++){
GridViewerColumn col=新的GridViewerColumn(查看器,SWT.NONE);
col.getColumn().setWidth(30);
col.getColumn().setText(“+i”);
}
go.addSelectionListener(新建SelectionAdapter(){
@凌驾
公共无效WidgeSelected(SelectionEvent e){
对于(GridColumn c:viewer.getGrid().getColumns()){
c、 处置();
}
对于(int i=0;i<10;i++){
GridViewerColumn col=新的GridViewerColumn(查看器,
SWT(无);
col.getColumn().setWidth(30);
col.getColumn().setText(“+i”);
}
}
});
shell.open();
而(!shell.isDisposed()){
如果(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}