2016-03-29 8 views
0

Ich verwende eine Instanz eines org.eclipse.swt.widgets.DateTime-Widgets, damit der Benutzer ein Datum auf der Benutzeroberfläche festlegen kann, aber ich habe Probleme, die Ränder und Stile richtig einzustellen. Ich benutze SWT.DATE und SWT.DROP_DOWN und bekomme alles, was ich brauche, aus dem Widget aus der Box, das ist großartig, aber wie bekomme ich den Text innerhalb der Eingabe mit Rändern, so dass es nicht direkt am Rand des Eingabefeldes beginnt ?Wie lege ich die Ränder für die DD MM- oder YYYY-Felder in einem SWT DateTime-Widget fest?

Alternativ kann ich eine Auffüllung innerhalb der DateTime innere Zusammensetzung irgendwie festlegen? Ich habe die üblichen versucht, haben aber nur bei der Einrichtung einer Marge auf dem Verbund selbst ...

Gerade jetzt gelungen, es sieht wie folgt aus:

Image of my current situation, no margin

mit diesem Code instanziiert:

(...) 
    dateInputComposite = new Composite(parent, SWT.LEFT); 

    Label datumLabel = new Label(dateInputComposite, SWT.LEFT); 
    dateLabel.setText(DATE_LABEL_TEXT); 
    dateLabel.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_FILL)); 

    DateTime dateInputWidgetWidget = new DateTime(dateInputComposite, SWT.DATE | SWT.DROP_DOWN); 
    // create bindings for dateInputWidgetWidget here 

    new DateTime(dateInputComposite, SWT.DATE | SWT.DROP_DOWN); 
    GridLayoutFactory.fillDefaults().margins(0, 0).numColumns(3).applyTo(dateInputComposite); 
+1

-Layout passt sich immer der Leerzeichen um ein Steuerelement herum, niemals den Abstand im Steuerelement. –

+0

@ greg-449 Ich verstehe. Bedeutet das, dass es so einfach ist, wenn es keine API gibt, um es über das DateTime-Widget selbst anzupassen, dann ist das nicht möglich? – Spork

Antwort

2

Wenn es Ihnen nichts ausmacht mit Nebula's CDateTime, dann können Sie Ihr eigenes Muster definieren und es auf etwas wie: " dd/MM/yyyy" (beachten Sie die Leerzeichen am Anfang), um einige künstliche Marge/Padding hinzufügen.

Hier ist ein Beispiel:

public static void main(String[] args) 
{ 
    final Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setText("Stackoverflow"); 
    shell.setLayout(new FillLayout()); 

    CDateTime dateTime = new CDateTime(shell, CDT.DATE_MEDIUM | CDT.DROP_DOWN); 
    dateTime.setPattern(" dd/MM/yyyy"); 
    dateTime.setSelection(new Date()); 

    shell.pack(); 
    shell.open(); 

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

wie folgt aussieht:

enter image description here

Oder Polsterung um jede Komponente hinzufügen, indem " dd/MM/yyyy " mit:

enter image description here

+0

Ich bin natürlich ein wenig enttäuscht, dass ich eine neue Abhängigkeit für etwas brauche, das mir so einfach klingt - und dass die neue Abhängigkeit nur Unterstützung durch einen Dateformat-Hack hat ... Aber ich schätze die Hilfe viel - und ich werde diese Lösung verwenden, wenn keine andere auftaucht! – Spork

+0

@Spork Ich fühlte das gleiche. Sie können nicht einmal das Format der regulären 'DateTime' angeben. Es wird die Einstellungen Ihres Betriebssystems verwenden, was das richtige i18n sehr schwierig macht, z. Wenn das Betriebssystem eines Benutzers auf Deutsch eingestellt ist, aber die Anwendung auf Englisch sein soll. 'CDateTime' ist eine gute Alternative, aber ja, es fügt eine weitere Abhängigkeit hinzu. – Baz