SWT autosize bei gc.drawString() auf einem Label

cr4zy

Mitglied
Hallo,
ich stehe vor folgendem Problem. Ich habe mir mit SWT eine view erstellt und diese zeigt nun per GridLayout einen String, darunter eine Sprechblase und darunter ein Strichmännchen an. Soweit so gut. Nun soll die Sprechblase nicht leer sein, sondern logischerweise mit Text gefüllt werden, der aber dynamisch ist und keine feste Länge hat, dies hab ich mit GC.drwaString() vorgenommen. Problem: Wenn ich den String dann um einige Wörter ergänze, wird kein automatischer Zeilenumbruch vorgenommen, sondern einfach alles in einer Zeile geschrieben bzw. nur soviel Text angezeigt, wie in eine Zeile des Labels passt. Frage: Gibt es eine art autosize Methode oder ähnliches?

private void createCallInput(String convName, Conversation conv) {
// TODO get entries if only 1 entry put picture and get send voice output
comp.setLayout(new GridLayout(1, true));

Label lab = new Label(comp, SWT.NONE);
lab.setText(convName);
lab.setFont(new Font(comp.getDisplay(), "Arial", 40, SWT.COLOR_BLACK));
data = new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 0);
data.horizontalIndent = lab.getLocation().x + 45;
lab.setLayoutData(data);

String text = viewAdapter.getSendVoiceInputContent(conv);

Label label = new Label(comp, SWT.TRANSPARENT);
Image image = new Image(comp.getDisplay(), getClass().getResourceAsStream("/icons/speechbubble.png"));
int width = image.getBounds().width;
int height = image.getBounds().height;
Image speechBubble = new Image(comp.getDisplay(), image.getImageData().scaledTo((int) (width * 2),
(int) (height * 1.1)));
label.setImage(speechBubble);
label.setFont(new Font(comp.getDisplay(), "Arial", 28, SWT.COLOR_BLACK));
data = new GridData(SWT.CENTER, SWT.CENTER, true, true);
GC gc = new GC(speechBubble);
gc.setAntialias(SWT.ON);
gc.setBackground(new Color(comp.getDisplay(), 130, 172, 26));
gc.setFont(new Font(comp.getDisplay(), "Arial", 20, SWT.COLOR_BLACK));
gc.drawString(text, speechBubble.getBounds().x + 10, speechBubble.getBounds().y + 10);
label.setLayoutData(data);

Label person = new Label(comp, SWT.NONE);
Image pers = new Image(comp.getDisplay(), getClass().getResourceAsStream("/icons/menschSymbol.png"));
width = pers.getBounds().width;
height = pers.getBounds().height;
Image personImage = new Image(comp.getDisplay(), pers.getImageData().scaledTo((int) (width * 0.08),
(int) (height * 0.08)));
person.setImage(personImage);
data = new GridData(SWT.CENTER, SWT.CENTER, true, true, 1, 0);
data.horizontalIndent = person.getLocation().x - 230;
data.verticalIndent = person.getLocation().y - 40;
person.setLayoutData(data);

comp.layout();

}


Danke im Voraus
 

Anhänge

  • test.txt
    2,2 KB · Aufrufe: 2

Neumi5694

Top Contributor
Ob das jetzt die By-The-Book-Methode ist, weiß ich nicht, aber umschließ den String mal mit html-Tags, damit kriegst du Zeilenumbrüche.
 

Thallius

Top Contributor
Wenn du den String selber zeichnest must du dich auch selber um die Formatierung kümmern. Du kannst aber mit Hilfe der FontMetrics ausrechnen wieviele Zeichen in deine Blase passen und dann entsprechend sleber umbrechen. Ist natürlich aufwendig aber geht.

Ich würde einfach ein unsichbares Panel über die Blase legen und da eine Textarea reinsetzen die das für mich macht.

Gruß

Claus
 

cr4zy

Mitglied
Danke @Thallius. Nein den String zeichne ich nicht selber, den les ich aus einer Datei aus, den String kann der benutzer selber festlegen, da kann alles von "Hallo Welt" bis "Zum Mittagessen gibt es Spaghetti" drinstehen.
 

Neumi5694

Top Contributor
Danke @Thallius. Nein den String zeichne ich nicht selber...
doch
Java:
gc.drawString(text, speechBubble.getBounds().x + 10, speechBubble.getBounds().y + 10);

Und genau das hab bei meiner Antwort übersehen.
Thallius Antwort ist absolut richtig.

Idee:
Momentan erstellst du ein Label als Holder für ein Image, in dieses Image zeichnest du dann rein.
So musst du alles manuell machen. Versuch mal, dein Image als Hintergrund für das Label zu verwenden und ins Label zu schreiben, anstatt das Layout für den Text selbst verwalten zu müssen.
 

cr4zy

Mitglied
@Neumi5694 wenn ich es als BackgroundImage einfüge wird es abgeschnitten, da sich die größe des labels nun auf den String bezieht.
Code:
String text = viewAdapter.getSendVoiceInputContent(conv);
        Label label = new Label(comp, SWT.WRAP);
        Image speechBubble = getImage("/icons/speechbubble.png", 2, 1.1);
        label.setFont(new Font(comp.getDisplay(), "Arial", 20, SWT.COLOR_BLACK));
        label.setText(text);
        label.setBackgroundImage(speechBubble);
        data = new GridData(SWT.CENTER, SWT.CENTER, true, true);
        label.setLayoutData(data);
 

Neumi5694

Top Contributor
Naja, du musst das Label natürlich so groß machen, dass das Backgroundimage Platz hat.
wenn du die preferredSize setzt, dann kann höchstens ein Layoutmanager, der auf den Wert pfeift, das Label noch breiter machen.
Setze die Größe also so, dass deine Bubble Platz hat.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D SWT Autosize TableColumn AWT, Swing, JavaFX & SWT 3
G Autosize AWT, Swing, JavaFX & SWT 3
W ImageIcon im JLabel mit autosize? AWT, Swing, JavaFX & SWT 3
G JList autosize AWT, Swing, JavaFX & SWT 6
M Graphics2D: drawString Berechnung AWT, Swing, JavaFX & SWT 1
X AWT Text der mit Graphics "drawString(...)" geschreiben wurde wieder löschen. AWT, Swing, JavaFX & SWT 6
M JFrame Graphics.drawString Problem AWT, Swing, JavaFX & SWT 11
P drawString in einem Rectangle AWT, Swing, JavaFX & SWT 4
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
C drawString wird beim starten des Programmes nicht ausgeführt AWT, Swing, JavaFX & SWT 3
B Graphics2d drawString mit double Werten? AWT, Swing, JavaFX & SWT 5
K Java DrawString zentriert und mehrzeilig AWT, Swing, JavaFX & SWT 8
R AWT drawString - Ausmaße AWT, Swing, JavaFX & SWT 4
F Browser drawString AWT, Swing, JavaFX & SWT 4
J 2D-Grafik Html in drawString() AWT, Swing, JavaFX & SWT 2
A Formatierten String ausgeben (drawString) AWT, Swing, JavaFX & SWT 5
Zettelkasten drawString() Zeilenumbruch AWT, Swing, JavaFX & SWT 2
M breite eines "drawString()-Strings" AWT, Swing, JavaFX & SWT 2
T 2D-Grafik Blocksatz mit drawString() AWT, Swing, JavaFX & SWT 5
F AWT Probleme mit drawString() AWT, Swing, JavaFX & SWT 5
S drawString für HTML-Text? AWT, Swing, JavaFX & SWT 7
R drawString mit double Koordinaten AWT, Swing, JavaFX & SWT 5
D AWT drawString funktioniert nicht unter Linux AWT, Swing, JavaFX & SWT 7
G [gelöst] "Größe" von drawString AWT, Swing, JavaFX & SWT 4
spross line break bei drawString() mit LineBreakMeasurer? AWT, Swing, JavaFX & SWT 4
MasterEvil HTML formatierten Text mit drawString ? AWT, Swing, JavaFX & SWT 3
A Zentrieren von drawstring() in einem fillRect() AWT, Swing, JavaFX & SWT 3
m@nu Graphics: Per drawString() Text vertikal zentriert zeichnen AWT, Swing, JavaFX & SWT 5
T drawString AWT, Swing, JavaFX & SWT 9
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
S Swing zu einem Datum Tage addieren/subtrahieren AWT, Swing, JavaFX & SWT 6
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
N Nur bei einem Textfiled Nullpointerexception bei getText() AWT, Swing, JavaFX & SWT 1
H JComobox in einem JPopupNeu AWT, Swing, JavaFX & SWT 7
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
D AWT Wie kann ich ein Frame von einem anderen aus beeinflussen? AWT, Swing, JavaFX & SWT 7
T Setzen von der Schriftgröße bei einem Shell AWT, Swing, JavaFX & SWT 15
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
D JavaFX Ein Parameter von einem Stage(GUI) zu einem anderen übergeben AWT, Swing, JavaFX & SWT 6
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
S JavaFX Variablen in einem FXML File verwenden AWT, Swing, JavaFX & SWT 8
A Objekt von einem Window erstellen? AWT, Swing, JavaFX & SWT 8
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
F JavaFX PNG aus einem resource Ordner laden AWT, Swing, JavaFX & SWT 8
F JavaFX Checken ob der Input einem festgelegten Format gleicht AWT, Swing, JavaFX & SWT 7
B JavaFX Bilder in einem Gewissen bereich halten AWT, Swing, JavaFX & SWT 1
cool_brivk24 BufferedImage einem ClickEvent hinzufügen AWT, Swing, JavaFX & SWT 13
Q-bert Doppelclick auf einem List item AWT, Swing, JavaFX & SWT 9
J JavaFX von einem Array aus Buttons herausfinden auf welcher geklickt wurde aus dem Array. AWT, Swing, JavaFX & SWT 1
R Farbe zu einem Eckpunkt generieren AWT, Swing, JavaFX & SWT 2
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
F abgeleitete Panels von einem ContentPanel AWT, Swing, JavaFX & SWT 4
heinz ketchup While-Schleife in einem Service für GUI AWT, Swing, JavaFX & SWT 22
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
L JavaFX Mehrere JavaFX Szenen mit einem Menü AWT, Swing, JavaFX & SWT 1
L JavaFX Klickverhalten bei einem Panel AWT, Swing, JavaFX & SWT 1
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
Y Darstellung und MouseHover bei bestimmten Wörtern in einem String AWT, Swing, JavaFX & SWT 2
GreenTeaYT Wie vergebe Ich den Jframe Title den Namen aus einem Element von der Arraylist ? AWT, Swing, JavaFX & SWT 4
H Geld pro Sekunde in einem Clickerspiel AWT, Swing, JavaFX & SWT 4
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
F Zeichnung einem JPanel im Layoutmanager zuweisen AWT, Swing, JavaFX & SWT 3
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
T AWT Farben in einem Bild ändern AWT, Swing, JavaFX & SWT 8
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
M Text in einem Label fett setzen AWT, Swing, JavaFX & SWT 4
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
K JavaFX Mehrere Cell Editors in einem TreeView Item AWT, Swing, JavaFX & SWT 2
F JavaFX JavaFX - Hintergrundmusik in einem seperatem Task/Service AWT, Swing, JavaFX & SWT 6
D JavaFX Gesetzte Variable in einem Controller im Controller laden AWT, Swing, JavaFX & SWT 1
D Swing JCombobox in einem JTable vorbelegen AWT, Swing, JavaFX & SWT 4
T Swing JTable Zeile mit ausgelesenen Werten mit Hilfe von einem Button hinzufügen AWT, Swing, JavaFX & SWT 1
E JavaFX MenuBar und ToolBar zu einem Bereich AWT, Swing, JavaFX & SWT 3
Y Kann man Buttons in einem JFrame rund machen ? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben