【发布时间】:2017-11-21 10:58:39
【问题描述】:
我是 RCP 框架的初学者。我在 Eclipse RCP3 应用程序名称中使用了一个编辑器,例如“食物编辑器”。在这个编辑器中,我制作了一个带有 SWT.Check 表项的 SWT 表。 我遇到了关于复选框选择的问题。
这个编辑器的当前场景是,当食物编辑器打开时,我选择复选框,然后我打开新的编辑器名称,如 Employee_Editor。 在 Employee_Editor 打开之前,我关闭了选中复选框的食物编辑器。然后我再次打开食物编辑器然后前一个“已选择”复选框显示为“未选择”为什么会发生这种情况?
我试图解决这个问题我在互联网上搜索我找到了使用数据库“选定复选框”保存为布尔数据类型的解决方案。 但我不想这样做,因为当有很多数据出现时,SQL 查询会触发很多次。
所以,我尝试通过在 createPartControl 中定义一种方法“saveSelectedCheckBox”,将选中的复选框表项保存到“selectedTableItemList”中。 但是当我关闭食物编辑器时我也遇到了问题,然后我再次打开它我遇到了带有空值的“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;
}
}
我想在食品编辑器打开时选择复选框,然后打开新的编辑器名称,例如 Employee_Editor。 然后我再次打开食品编辑器“已选择”复选框,显示为“已选择”。如何做到这一点?请帮帮我。
我的系统配置:
Windows 64Bit OS.
Eclipse Kepler 32 bit.
jdk 1.8
【问题讨论】:
-
@greg-449:如何使用 doSave 方法以及我要保存哪个文件?那么如何轻松将此值加载到编辑器部分?请帮忙。
-
@greg-449:实际上我从来没有使用过这种方法来保存文件。所以你能告诉我哪个文件最适合保存这个编辑器部分吗?
-
@greg-449:我在食物编辑器中修改了 doSave() 方法。
public void doSave(IProgressMonitor monitor) {if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() == null) { return; } IEditorPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); if (part != null) { IWorkbenchPage page = part.getSite().getPage(); page.saveEditor(part, true); }但编辑器部分不保存,这就是为什么 init() 不加载保存文件的原因。请帮助保存编辑器部分。 -
@greg-449: 是的,我正在通过处理程序命令类启动食物编辑器。我正在使用 FoodDetailsEditorInput 进行编辑器输入。init 和输入编辑器代码的代码是什么?
-
@greg-449: 我把代码 init(site,input) 放在下面的代码中: if (!(input instanceof FoodDetailsEditorInput)) { throw new PartInitException("Invalid Input: Must be " + FoodDetailsEditorInput.类.getName()); } 设置站点(站点);设置输入(输入); 但我无法加载编辑器保存的文件。请帮助我。
标签: java checkbox swt eclipse-rcp