hallo,
ich versuche gerade eine eigene komponente mit databinding support zu implementieren.
eigentlich ist das eine einfache komponente, die aus anderen SET/JFace komponenten besteht.
ich hab in einer testanwendung databinding schon verwendet, allerdings nur mit den fertigen viewer und textfeldern...
hier mal meine klasse, der gui componente
und hier noch der test... wo man sieht, dass es nicht klappt...
eigentlich wollte ich nur, dass ich dann per bind nur noch das objekt mitgeben muss (und den databinding-context)
PS: bei 37°C oder mehr in diesem büro ists schwer nen kühlen kopf zu behalten :bahnhof:
ich versuche gerade eine eigene komponente mit databinding support zu implementieren.
eigentlich ist das eine einfache komponente, die aus anderen SET/JFace komponenten besteht.
ich hab in einer testanwendung databinding schon verwendet, allerdings nur mit den fertigen viewer und textfeldern...
hier mal meine klasse, der gui componente
Code:
public class BasicComposite extends Composite {
private Text text;
/**
* Create the composite.
*
* @param parent
* @param style
*/
public BasicComposite(Composite parent, int style) {
super(parent, style);
GridLayout gridLayout = new GridLayout(3, true);
gridLayout.marginHeight = 0;
gridLayout.marginWidth = 0;
gridLayout.verticalSpacing = 0;
setLayout(gridLayout);
setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
{
Label label = new Label(this, SWT.NONE);
label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false,
false, 1, 1));
label.setText("New Label");
}
{
text = new Text(this, SWT.BORDER);
text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false,
2, 1));
}
}
public DataBindingContext bind(Object obj, String fieldName) {
// if the bindingContext is not valid... create a new one
DataBindingContext bindingContext = new DataBindingContext();
//
IObservableValue textObserveTextObserveWidget = SWTObservables
.observeText(text, SWT.Modify);
IObservableValue objNameObserveValue = BeansObservables.observeValue(
obj, fieldName);
bindingContext.bindValue(textObserveTextObserveWidget,
objNameObserveValue, null, null);
//
return bindingContext;
}
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}
Code:
public class FormTest {
// private DataBindingContext m_bindingContext;
protected Shell shell;
private SampleObject obj;
private BasicComposite bc;
private BasicComposite bc2;
/**
* Launch the application.
*
* @param args
*/
public static void main(String[] args) {
Display display = Display.getDefault();
Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() {
public void run() {
try {
FormTest window = new FormTest();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(450, 300);
shell.setText("SWT Application");
shell.setLayout(new GridLayout(1, false));
{
bc = new BasicComposite(shell, SWT.NONE);
bc.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1,
1));
}
{
bc2 = new BasicComposite(shell, SWT.NONE);
bc2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false,
1, 1));
}
obj = new SampleObject();
bc.bind(obj, "name");
bc2.bind(obj, "name");
}
}
eigentlich wollte ich nur, dass ich dann per bind nur noch das objekt mitgeben muss (und den databinding-context)
PS: bei 37°C oder mehr in diesem büro ists schwer nen kühlen kopf zu behalten :bahnhof:
Zuletzt bearbeitet: