Java 如何在RCP应用程序中保存选中的复选框?

Java 如何在RCP应用程序中保存选中的复选框?,java,checkbox,swt,eclipse-rcp,Java,Checkbox,Swt,Eclipse Rcp,我是RCP框架的初学者,我在EclipseRCP3应用程序中使用过一个编辑器,比如“Food Editor”。在这个编辑器中,我用SWT制作了一个SWT表。检查表项。 我面临有关复选框选择的问题 该编辑器的当前场景是,当食品编辑器打开时,我选中复选框,然后打开新的编辑器名称,如Employee_editor在Employee_编辑器打开之前,我使用选中的复选框关闭了食品编辑器。然后我再次打开Food editor然后上一个“Selected”复选框显示为“Unselected”,为什么会发生这种

我是RCP框架的初学者,我在EclipseRCP3应用程序中使用过一个编辑器,比如“Food Editor”。在这个编辑器中,我用SWT制作了一个SWT表。检查表项。 我面临有关复选框选择的问题

该编辑器的当前场景是,当食品编辑器打开时,我选中复选框,然后打开新的编辑器名称,如Employee_editor在Employee_编辑器打开之前,我使用选中的复选框关闭了食品编辑器。然后我再次打开Food editor然后上一个“Selected”复选框显示为“Unselected”,为什么会发生这种情况

我试图得到这个问题的解决方案我在互联网上搜索我找到了解决方案使用数据库“选中复选框”另存为数据类型布尔。 但我不想这样做,因为当很多数据出现时,SQL查询会多次触发

因此,我尝试在createPartControl中定义一个方法“saveSelectedCheckBox”,即将选中的复选框表项保存到“selectedTableItemList”中。 但在另一个例子中,当我关闭food editor,然后再次打开它时,我发现“selectedTableItemList”的值为空时出现了问题。 我已经分享了下面给出的代码

public class FoodDetailsEditor extends EditorPart {

public static final String ID = "rcp_demo.Editor.FoodDetailsEditor"; //$NON-NLS-1$Food_Details
public static final String BID = "Food_Details";
 private static final String STORE_SELECTION = "rcp_demo.Editor.FoodDetailsEditor";
private Table table;
 ArrayList<Integer>  selectedTableItemList= null;

@Override
public void createPartControl(Composite parent) {

    ScrolledComposite scrolledComposite_2 = new ScrolledComposite(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    scrolledComposite_2.setExpandHorizontal(true);
    scrolledComposite_2.setExpandVertical(true);

    Composite composite = new Composite(scrolledComposite_2, SWT.NONE);
    composite.setLayout(new GridLayout(1, false));

    table = new Table(composite, SWT.BORDER | SWT.FULL_SELECTION|SWT.CHECK);
    GridData gd_table = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
    gd_table.heightHint = 156;
    gd_table.widthHint = 565;
    table.setLayoutData(gd_table);
    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    TableColumn tblclmnCheckbox = new TableColumn(table, SWT.NONE);
    tblclmnCheckbox.setWidth(100);
    tblclmnCheckbox.setText("Checkbox");

    TableColumn tblclmnTiming = new TableColumn(table, SWT.NONE);
    tblclmnTiming.setWidth(100);
    tblclmnTiming.setText("Timing");

    TableColumn tblclmnMonday = new TableColumn(table, SWT.NONE);
    tblclmnMonday.setWidth(100);
    tblclmnMonday.setText("Monday");

    TableColumn tblclmnTuesday = new TableColumn(table, SWT.NONE);
    tblclmnTuesday.setWidth(100);
    tblclmnTuesday.setText("Tuesday");

    TableColumn tblclmnWednesday = new TableColumn(table, SWT.NONE);
    tblclmnWednesday.setWidth(100);
    tblclmnWednesday.setText("Wednesday");

    TableColumn tblclmnThursday = new TableColumn(table, SWT.NONE);
    tblclmnThursday.setWidth(100);
    tblclmnThursday.setText("Thursday");

    TableColumn tblclmnFriday = new TableColumn(table, SWT.NONE);
    tblclmnFriday.setWidth(100);
    tblclmnFriday.setText("Friday");

    TableColumn tblclmnSaturday = new TableColumn(table, SWT.NONE);
    tblclmnSaturday.setWidth(100);
    tblclmnSaturday.setText("Saturday");
    scrolledComposite_2.setContent(composite);
    scrolledComposite_2.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));

    TableItem item1 = new TableItem(table, SWT.NONE);
    item1.setText(new String[]{"","10:00 to 10:30","Food1","Food2","Food3","Food4","Food5"});
    TableItem item2 = new TableItem(table, SWT.NONE);
    item2.setText(new String[]{"","11:00 to 11:30","Food1","Food2","Food3","Food4","Food5"});
    TableItem item3 = new TableItem(table, SWT.NONE);
    item3.setText(new String[]{"","12:00 to 12:30","Food1","Food2","Food3","Food4","Food5"});
    TableItem item4 = new TableItem(table, SWT.NONE);
    item4.setText(new String[]{"","13:00 to 13:30","Food1","Food2","Food3","Food4","Food5"});


    table.addSelectionListener(new SelectionAdapter()
    {               
        @Override
        public void widgetSelected(SelectionEvent event)
        {
            if( event.detail == SWT.CHECK ) 
                {
                  if( table.indexOf( ( TableItem )event.item ) == table.getSelectionIndex() ) 
                   {

                    TableItem ti = ( TableItem )event.item;
                    ti.setChecked( !ti.getChecked() );                      
                    System.out.println("event.index:-"+event.item);                     

                    }
                } 
              saveSelectedCheckBox(table);
        }

        private void saveSelectedCheckBox(Table table) {
            // TODO Auto-generated method stub
             TableItem[] items =  table.getItems();
          selectedTableItemList=new ArrayList<Integer>();//Creating arraylist 

                for (int ro = 0; ro < table.getItemCount();ro++)
                {      if(items[ro].getChecked()== true)
                        {
                        System.out.println("items[ro]:=="+items[ro]);
                        selectedTableItemList.add(ro);
                        }

                    } 
                for(int row = 0; row < selectedTableItemList.size();row++)
                {
                     System.out.println("selectedTableItemList:--"+selectedTableItemList);
                }
        }
    });
}

@Override
public void setFocus() {
    // Set the focus
}

@Override
public void doSave(IProgressMonitor monitor) {
    // Do the Save operation    
}

@Override
public void doSaveAs() {
    // Do the Save As operation     
}

@Override
public void init(IEditorSite site, IEditorInput input)
        throws PartInitException {
    System.out.println("init called");
     System.out.println("selectedTableItemList:--"+selectedTableItemList);
    // Initialize the editor part
     if (!(input instanceof FoodDetailsEditorInput)) {
          throw new PartInitException("Invalid Input: Must be " + FoodDetailsEditorInput.class.getName());
      }
      setSite(site);
      setInput(input);
}

@Override
public boolean isDirty() 
{   
    return false;
}

@Override
public boolean isSaveAsAllowed() {
    System.out.println("isSaveAsAllowed called");
    return true;
}
}
table.addSelectionListener(新的SelectionAdapter()
{  
@凌驾
公共无效widgetSelected(SelectionEvent事件)
{
if(event.detail==SWT.CHECK)
{
if(table.indexOf((TableItem)event.item)=table.getSelectionIndex())
{
TableItem ti=(TableItem)event.item;
ti.setChecked(!ti.getChecked());
}
saveSelectedCheckBox(表);
}                
}
private void saveSelectedCheckBox(表格)
{
对于(int ro=0;ro对于(int j=0;j当您关闭一个编辑器时,您会丢失它的状态,并且在打开编辑器时会再次执行
createPartControl()
。因此,您会使表处于初始状态。您应该执行
TableItem.setChecked()
创建表并将值设置为前一个用户选择的值后。最好的方法是将表行中的数据转换为对象,然后使用创建表

private TableViewer viewer;
private List<WeeklyMenu> menu = Menu.MENU.getWeeklyMenu(); 

public void createPartControl(Composite parent) {
    Table table = createTable(parent);

    viewer.setInput(menu);

    for (TableItem item : table.getItems()) {
        WeeklyMenu weeklyMenu = (WeeklyMenu)item.getData();
        item.setChecked(weeklyMenu.isChecked());
    }

    viewer.refresh();

    table.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            if( e.detail == SWT.CHECK ) 
            {
                TableItem item = (TableItem)e.item;
                WeeklyMenu weeklyMenu = (WeeklyMenu)item.getData();
                weeklyMenu.setChecked(item.getChecked());
            } 
        }
    });

}

private Table createTable(Composite parent) {
    viewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION | SWT.CHECK);
    Table table = viewer.getTable();
    table.setHeaderVisible(true);
    table.setLinesVisible(true);
    viewer.setContentProvider(new IStructuredContentProvider() {

        @Override
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            // TODO Auto-generated method stub

        }

        @Override
        public void dispose() {
            // TODO Auto-generated method stub

        }

        @Override
        public Object[] getElements(Object inputElement) {
            return menu.toArray();
        }
    });

    createColumns(table);
    return table;
}

private void createColumns(Table table) {
    TableLayout layout = new TableLayout();
    layout.addColumnData(new ColumnWeightData(10, true));
    layout.addColumnData(new ColumnWeightData(20, true));
    layout.addColumnData(new ColumnWeightData(20, true));
    layout.addColumnData(new ColumnWeightData(20, true));
    layout.addColumnData(new ColumnWeightData(20, true));
    layout.addColumnData(new ColumnWeightData(20, true));
    layout.addColumnData(new ColumnWeightData(20, true));
    layout.addColumnData(new ColumnWeightData(20, true));
    layout.addColumnData(new ColumnWeightData(20, true));
    table.setLayout(layout);

    TableViewerColumn column = createTableViewerColumn("Checkbox");
    column.setLabelProvider(new ColumnLabelProvider(){
        @Override
        public String getText(Object element) {
            return "";
        }
    });

    column = createTableViewerColumn("Timing");
    column.setLabelProvider(new ColumnLabelProvider(){
        @Override
        public String getText(Object element) {
            return ((WeeklyMenu)element).getTiming();
        }
    });

    column = createTableViewerColumn("Monday");
    column.setLabelProvider(new ColumnLabelProvider(){
        @Override
        public String getText(Object element) {
            return ((WeeklyMenu)element).getMonFood();
        }
    });

    column = createTableViewerColumn("Tuesday");
    column.setLabelProvider(new ColumnLabelProvider(){
        @Override
        public String getText(Object element) {
            return ((WeeklyMenu)element).getTueFood();
        }
    });

    column = createTableViewerColumn("Wednesday");
    column.setLabelProvider(new ColumnLabelProvider(){
        @Override
        public String getText(Object element) {
            return ((WeeklyMenu)element).getWedFood();
        }
    });

    column = createTableViewerColumn("Thursday");
    column.setLabelProvider(new ColumnLabelProvider(){
        @Override
        public String getText(Object element) {
            return ((WeeklyMenu)element).getThuFood();
        }
    });

    column = createTableViewerColumn("Friday");
    column.setLabelProvider(new ColumnLabelProvider(){
        @Override
        public String getText(Object element) {
            return ((WeeklyMenu)element).getFriFood();
        }
    });

    column = createTableViewerColumn("Saturday");
    column.setLabelProvider(new ColumnLabelProvider(){
        @Override
        public String getText(Object element) {
            return ((WeeklyMenu)element).getSatFood();
        }
    });

    column = createTableViewerColumn("Sunday");
    column.setLabelProvider(new ColumnLabelProvider(){
        @Override
        public String getText(Object element) {
            return ((WeeklyMenu)element).getSunFood();
        }
    });
}

private TableViewerColumn createTableViewerColumn(String name) {
    TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.CENTER);
    TableColumn column = viewerColumn.getColumn();
    column.setText(name);
    column.setMoveable(true);
    return viewerColumn;
}
}

和类
菜单

public class WeeklyMenu {
private boolean isChecked;
private String timing;
private String monFood;
private String tueFood;
private String wedFood;
private String thuFood;
private String friFood;
private String satFood;
private String sunFood;

public WeeklyMenu(boolean isChecked, String timing, String monFood, String tueFood, String wedFood, String thuFood, String friFood,
        String sutFood, String sunFood) {
    super();
    this.isChecked = isChecked;
    this.timing = timing;
    this.monFood = monFood;
    this.tueFood = tueFood;
    this.wedFood = wedFood;
    this.thuFood = thuFood;
    this.friFood = friFood;
    this.satFood = sutFood;
    this.sunFood = sunFood;
}

public String getTiming() {
    return timing;
}

public void setTiming(String timing) {
    this.timing = timing;
}

public boolean isChecked() {
    return isChecked;
}
public void setChecked(boolean isChecked) {
    this.isChecked = isChecked;
}
public String getMonFood() {
    return monFood;
}
public void setMonFood(String monFood) {
    this.monFood = monFood;
}
public String getTueFood() {
    return tueFood;
}
public void setTueFood(String tueFood) {
    this.tueFood = tueFood;
}
public String getWedFood() {
    return wedFood;
}
public void setWedFood(String wedFood) {
    this.wedFood = wedFood;
}
public String getThuFood() {
    return thuFood;
}
public void setThuFood(String thuFood) {
    this.thuFood = thuFood;
}
public String getFriFood() {
    return friFood;
}
public void setFriFood(String friFood) {
    this.friFood = friFood;
}
public String getSatFood() {
    return satFood;
}
public void setSatFood(String sutFood) {
    this.satFood = sutFood;
}
public String getSunFood() {
    return sunFood;
}
public void setSunFood(String sunFood) {
    this.sunFood = sunFood;
}   
public class Menu {
public final static Menu MENU = new Menu();
private List<WeeklyMenu> weeklyMenu = new ArrayList<WeeklyMenu>();

private Menu(){
    weeklyMenu.add(new WeeklyMenu(false, "10:00 to 10:30", "Food1", "Food2", "Food3", "Food4", "Food5", "Food6", "Food7"));
    weeklyMenu.add(new WeeklyMenu(false, "10:30 to 11:00", "Food1", "Food2", "Food3", "Food4", "Food5", "Food6", "Food7"));
    weeklyMenu.add(new WeeklyMenu(false, "11:00 to 11:30", "Food1", "Food2", "Food3", "Food4", "Food5", "Food6", "Food7"));
    weeklyMenu.add(new WeeklyMenu(false, "11:30 to 12:00", "Food1", "Food2", "Food3", "Food4", "Food5", "Food6", "Food7"));
}

public List<WeeklyMenu> getWeeklyMenu() {
    return weeklyMenu;
}
公共类菜单{
公共最终静态菜单=新菜单();
private List weeklyMenu=new ArrayList();
私人菜单(){
添加(新的周菜单(false,“10:00至10:30”、“Food1”、“Food2”、“Food3”、“Food4”、“Food5”、“Food6”、“Food7”);
添加(新的周菜单(假,“10:30至11:00”,“Food1”,“Food2”,“Food3”,“Food4”,“Food5”,“Food6”,“Food7”);
添加(新的周菜单(false,“11:00至11:30”,“Food1”,“Food2”,“Food3”,“Food4”,“Food5”,“Food6”,“Food7”);
添加(新的周菜单(false,“11:30至12:00”,“Food1”,“Food2”,“Food3”,“Food4”,“Food5”,“Food6”,“Food7”);
}
公共列表getWeeklyMenu(){
返回周刊菜单;
}
}


将此类添加到项目中并替换
createPartControl()
与引用的代码片段一起。

@greg-449:如何使用doSave方法以及我要保存的文件?如何轻松地将此值加载到编辑器部分?请提供帮助。@greg-449:实际上我从未使用此方法保存文件。那么您可以告诉我哪个文件最适合保存此编辑器部分吗?@greg-449:我已修改了doSave()方法。
public void doSave(IProgressMonitor监视器){if(PlatformUI.getWorkbench().getActiveWorkbenchWindow()=null){return;}IEditorPart=PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();if(part!=null){IWorkbenchPage=part.getSite().getPage();page.saveEditor(part,true);}
但编辑器部分不保存,这就是init()的原因未加载保存文件。请帮助保存编辑器部件。@greg-449:是的,我正在通过处理程序、命令类启动食品编辑器。我正在使用FoodDetailsEditor输入编辑器输入。初始化和输入编辑器代码的代码是什么?@greg-449:我将代码初始化(站点、输入)放在下面给出的代码中:if(!(FoodDetailsEditor输入的输入实例)){抛出新PartInItemException(“无效输入:必须为“+FoodDetailsEditorInput.class.getName());}setSite(站点);setInput(输入);但我无法加载编辑器保存的文件。请帮帮我。@greg-449:我有更简单的代码来保存文件,当选中“文件”对话框打开并保存文件时,您能告诉我如何加载文件,然后我再次打开“食品编辑器”“选定”复选框,显示为“选定”吗.如何做到这一点?请帮助me@Ram不客气。需要补充的是
public class WeeklyMenu {
private boolean isChecked;
private String timing;
private String monFood;
private String tueFood;
private String wedFood;
private String thuFood;
private String friFood;
private String satFood;
private String sunFood;

public WeeklyMenu(boolean isChecked, String timing, String monFood, String tueFood, String wedFood, String thuFood, String friFood,
        String sutFood, String sunFood) {
    super();
    this.isChecked = isChecked;
    this.timing = timing;
    this.monFood = monFood;
    this.tueFood = tueFood;
    this.wedFood = wedFood;
    this.thuFood = thuFood;
    this.friFood = friFood;
    this.satFood = sutFood;
    this.sunFood = sunFood;
}

public String getTiming() {
    return timing;
}

public void setTiming(String timing) {
    this.timing = timing;
}

public boolean isChecked() {
    return isChecked;
}
public void setChecked(boolean isChecked) {
    this.isChecked = isChecked;
}
public String getMonFood() {
    return monFood;
}
public void setMonFood(String monFood) {
    this.monFood = monFood;
}
public String getTueFood() {
    return tueFood;
}
public void setTueFood(String tueFood) {
    this.tueFood = tueFood;
}
public String getWedFood() {
    return wedFood;
}
public void setWedFood(String wedFood) {
    this.wedFood = wedFood;
}
public String getThuFood() {
    return thuFood;
}
public void setThuFood(String thuFood) {
    this.thuFood = thuFood;
}
public String getFriFood() {
    return friFood;
}
public void setFriFood(String friFood) {
    this.friFood = friFood;
}
public String getSatFood() {
    return satFood;
}
public void setSatFood(String sutFood) {
    this.satFood = sutFood;
}
public String getSunFood() {
    return sunFood;
}
public void setSunFood(String sunFood) {
    this.sunFood = sunFood;
}   
public class Menu {
public final static Menu MENU = new Menu();
private List<WeeklyMenu> weeklyMenu = new ArrayList<WeeklyMenu>();

private Menu(){
    weeklyMenu.add(new WeeklyMenu(false, "10:00 to 10:30", "Food1", "Food2", "Food3", "Food4", "Food5", "Food6", "Food7"));
    weeklyMenu.add(new WeeklyMenu(false, "10:30 to 11:00", "Food1", "Food2", "Food3", "Food4", "Food5", "Food6", "Food7"));
    weeklyMenu.add(new WeeklyMenu(false, "11:00 to 11:30", "Food1", "Food2", "Food3", "Food4", "Food5", "Food6", "Food7"));
    weeklyMenu.add(new WeeklyMenu(false, "11:30 to 12:00", "Food1", "Food2", "Food3", "Food4", "Food5", "Food6", "Food7"));
}

public List<WeeklyMenu> getWeeklyMenu() {
    return weeklyMenu;
}