Hallo alle miteinander 
Wie der Threadtitel bereits implizit verrät, habe ich bei SWT das Problem, dass sich die Breite eines Textfeldes unter Verwendung eines Layoutmanagers nicht mehr ändern lässt. Folgendes habe ich vor. Ich habe zum Beispiel ein Textfeld, in dem nur 2 Zeichen eingetragen werden können (mit setTextLimit() kann man dies ja problemlos festlegen). Nun soll das Textfeld auch nur so breit sein, das es gerade diese beiden Zeichen und nicht mehr anzeigt. Auf der SWT Seite gibt es dafür ja auch ein entsprechendes Snippet, das leicht angepasst so aussieht:
So funktioniert es auch bei mir. Wenn man nun einen Layoutmanager hinzufügt, funktioniert das ganze allerdings nicht mehr:
Hier noch eine entsprechende Main-Funktion, falls es jemand auch testen will:
Nun lautet meine Frage, ob jemand weiß wie man so eine entsprechende Größenänderung eines Textfeldes auch unter Verwendung eines Layoutmanagers hinbekommt.
Wie der Threadtitel bereits implizit verrät, habe ich bei SWT das Problem, dass sich die Breite eines Textfeldes unter Verwendung eines Layoutmanagers nicht mehr ändern lässt. Folgendes habe ich vor. Ich habe zum Beispiel ein Textfeld, in dem nur 2 Zeichen eingetragen werden können (mit setTextLimit() kann man dies ja problemlos festlegen). Nun soll das Textfeld auch nur so breit sein, das es gerade diese beiden Zeichen und nicht mehr anzeigt. Auf der SWT Seite gibt es dafür ja auch ein entsprechendes Snippet, das leicht angepasst so aussieht:
Java:
public class OhneLayout
{
public void startGui(int anzahlZeichen)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Ohne Layout");
Text text = new Text(shell, SWT.BORDER);
GC gc = new GC(text);
int breite = gc.getFontMetrics().getAverageCharWidth();
gc.dispose();
text.setSize(text.computeSize(anzahlZeichen * breite, SWT.DEFAULT));
text.setTextLimit(anzahlZeichen);
shell.pack();
shell.open();
while(!shell.isDisposed()) {
if(!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
Java:
public class MitLayout
{
public void startGui(int anzahlZeichen)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Mit Layout");
shell.setLayout(new GridLayout()); // Als Beispiel ein GridLayout
Text text = new Text(shell, SWT.BORDER);
GC gc = new GC(text);
int breite = gc.getFontMetrics().getAverageCharWidth();
gc.dispose();
text.setSize(text.computeSize(anzahlZeichen * breite, SWT.DEFAULT));
text.setTextLimit(anzahlZeichen);
shell.pack();
shell.open();
while(!shell.isDisposed()) {
if(!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
Java:
public class Main
{
public static void main(String[] args)
{
int anzahlZeichen = 2;
new OhneLayout().startGui(anzahlZeichen);
new MitLayout().startGui(anzahlZeichen);
}
}