फोन आप TableViewer
में JFace Databinding फ्रेमवर्क का उपयोग की जरूरत नहीं करना चाहती। संरचित डेटा कुशलतापूर्वक एसडब्ल्यूटी नियंत्रण, TableViewer
, ListViewer
और TreeViewer
के बाद आसान है। आप एक ही तरह से उन व्यूअर का उपयोग कर सकते हैं:
- दर्शक बनाने
- सेट सामग्री प्रदाता
- सेट लेबल प्रदाता (सुझाव)
- सेट फिल्टर (वैकल्पिक)
- सेट सॉर्टर (वैकल्पिक)
दर्शक के निर्माण के बाद, सभी चीजों को अपने दर्शकों को रखने के लिए बस viewer.setInput(data)
पर जाएं।
TableViewer tableViewer = new TableViewer(parent);
Table table = tableViewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);`
for (int i = 0; i < COLUMN_NAMES.length; i++) {
TableColumn tableColumn = new TableColumn(table, SWT.LEFT);
tableColumn.setText(COLUMN_NAMES[i]);
tableColumn.setWidth(COLUMN_WIDTHS[i]);
}
tableViewer.setContentProvider(new ModelContentProvider());
tableViewer.setLabelProvider(new ModelLabelProvider());
tableViewer.setInput(models);
जादू सामग्री प्रदाता में क्या होता है:
class ModelContentProvider implements IStructuredContentProvider {
@SuppressWarnings("unchecked")
@Override
public Object[] getElements(Object inputElement) {
// The inputElement comes from view.setInput()
if (inputElement instanceof List) {
List models = (List) inputElement;
return models.toArray();
}
return new Object[0];
}
/* ... other methods */
}
प्रत्येक मॉडल एक TableItem
और TableItem(item.getData())
में मॉडल बन जाएगा
मॉडल की एक सूची नहीं है।
हालांकि, कई कॉलम द्वारा रचित एक मेज, आप LabelProvider
TableItem
करने के लिए मॉडल की संपत्ति मानचित्रण आपकी मदद की जरूरत है:
class ModelLabelProvider extends LabelProvider implements
ITableLabelProvider {
@Override
public Image getColumnImage(Object element, int columnIndex) {
// no image to show
return null;
}
@Override
public String getColumnText(Object element, int columnIndex) {
// each element comes from the ContentProvider.getElements(Object)
if (!(element instanceof Model)) {
return "";
}
Model model = (Model) element;
switch (columnIndex) {
case 0:
return model.getFoo();
case 1:
return model.getBar();
default:
break;
}
return "";
}
}
दर्शक को मॉडल के प्रसार आसान है। यदि आप CellEditor
का उपयोग करके बाध्य मॉडल पर दर्शक प्रसारित करेंगे, तो यह भी सरल है। CellEditor
का उपयोग करने के लिए आपको TableViewer
करने के लिए स्तंभ गुण, सेल संपादक और सेल संशोधक सेट की जरूरत है:
tableViewer.setColumnProperties(COLUMNS_PROPERTIES);
tableViewer.setCellEditors(new CellEditor[] {
new TextCellEditor(table), new TextCellEditor(table) });
tableViewer.setCellModifier(new ModelCellModifier(tableViewer));
CellModifier पसंद करती है यह:
class ModelCellModifier implements ICellModifier {
TableViewer viewer;
public ModelCellModifier(TableViewer viewer) {
this.viewer = viewer;
}
@Override
public boolean canModify(Object element, String property) {
// property is defined by viewer.setColumnProperties()
// allow the FOO column can be modified.
return "foo_prop".equals(property);
}
@Override
public Object getValue(Object element, String property) {
if ("foo_prop".equals(property)) {
return ((Model) element).getFoo();
}
if ("bar_prop".equals(property)) {
return ((Model) element).getBar();
}
return "";
}
@Override
public void modify(Object element, String property, Object value) {
if ("foo_prop".equals(property)) {
TableItem item = (TableItem) element;
((Model) item.getData()).setFoo("" + value);
// refresh the viewer to show the changes to our user.
viewer.refresh();
}
}
}
सब कुछ सरल है लेकिन वहाँ सभी बनाने के लिए कई कदम उठाए जाते हैं साथ में।
एक पूरा कोड है: http://pastie.org/1089932 – qrtt1
इस कोड के लिए बहुत बहुत धन्यवाद। वास्तव में उपयोगी! – flumins
... लेकिन आप डाटाबेसिंग पर क्यों छोड़ना चाहते हैं और बॉयलरप्लेट कोड लिखने के लिए वापस लौटना चाहते हैं? – vwegert