SWT: Label vertikal ausrichten

Status
Nicht offen für weitere Antworten.

Vatar

Bekanntes Mitglied
Moin Moin.
Ist es möglich ein Label im SWT vertikal auszurichten?
Mit
Code:
Label l = new Label(composite, SWT.VERTICAL)
funktioniert es leider nicht.

thx.
 

thE_29

Top Contributor
Das AlignMent hat aber nur was mit der Textausrichtung!!

Wenn du das Label vertikal haben musst, musst du die paint Methode für das Objekt überschreiben und entweder kompliziert mit Matrizen Rechnung umrechnen oder einfach umschieben da es sich ja um 90° handelt (Matrizenrechnung bräuchtest du nur wenn du 89° oder so haben willst)

Oder einfach die rotate Methode benutzen (was bei mir meistens nie geklappt hat) von Graphics2D
 

Vatar

Bekanntes Mitglied
Danke, aber...

für ein SWT-Label gibt es keine paint-Methode, nur zwei redraw und diese rufen native Methoden auf die sich um das Zeichnen kümmern (das war ja auch Sinn und Zweck des SWT).
Ich versuche nun gerade den String einfach selber auf der Komponente zu zeichnen.
Habe zwar ein Plugin gefunden (www.hollongate.org) mit dem man die Java2D-API auf dem SWT ausführen kann, allerdings kann man da nur auf einem speziellen Canvas (J2DCanvas) zeichnen und ich möchte das aber gerne auf einer Composite machen.

Also wenn jemand weiß wie man einen String im SWT ausrichten kann, wär ich sehr dankbar.

thx
 

thE_29

Top Contributor
Was bringt einem dieses SWT überhaupt, außer das man noch ne zusätzliche Library braucht damit es läuft...
 
R

Roar

Gast
thE_29 hat gesagt.:
Was bringt einem dieses SWT überhaupt, außer das man noch ne zusätzliche Library braucht damit es läuft...
vor und nachteile von swt stehen hier nich zur diskussion :?
 

thE_29

Top Contributor
Na, ich wollt nur wissen ob es vom optischen her oder sonstiges sich viel von Swing/AWT unterscheiden.. (bisi schneller solls ja sein oder sowas in der Art...)

Wenn dies net der Fall is, versteh ichs net :bae:
 

Vatar

Bekanntes Mitglied
:meld: Ich benutze es eigentlich nur zwei Gründen. SWING IST HÄSSLICH UND LANGSAM (ich weiß, es gibt auch ein Windows L&F). Ich denke damals wollten die von Sun sich einfach sehr stark vom Marktführer (Billy Boy) abheben.
Ich muss aber zugeben, dass die 1.5er Version schon wesentlich besser aussieht.

Wenn ich eine kleines Proggi für einen Standardanwender mit Swing schreib dann kommt zuerst die Frage: "Warum schaut denn das alles so komisch aus?" (weil er/sie nunmal seine Windows/Linux Fensterchen gewöhnt ist).

Da SWT die Zeichenmethoden des OS aufruft sieht ein Java-Proggi mit SWT aus wie ein Standardprogramm dieses Betriebssystems.
 
S

stev.glasow

Gast
Melde einen Paintlistener an und zeichne den Text selber, VERTICALund HORIZONTAL sind nur für die Ausrichtung von SEPARATORen gedacht
 
R

Roar

Gast
Vatar hat gesagt.:
SWING IST HÄSSLICH UND LANGSAM

jo das sind wohl das beiden am weitesten verbreiteten unbegründeten vorurteile gegen swing :?
swing ist schnell, und hässlich ist das auch nicht. das gilt nich also nich :bae:

irgendwas wollt ich noch sagen, hab jetz vergessen :?

edit um nich zwei sinnlos posts in einem trhead zu haben: genau :lol:
 
S

stev.glasow

Gast
irgendwas wollt ich noch sagen, hab jetz vergessen
Dass das subjektiv ist und hier nicht zur Disskusion steht :wink: Und als schnell würde ich Swing nicht bezeichenn, aber lassen wir das, bitte
 

Vatar

Bekanntes Mitglied
stevg hat gesagt.:
Melde einen Paintlistener an und zeichne den Text selber, VERTICALund HORIZONTAL sind nur für die Ausrichtung von SEPARATORen gedacht

Hab ich schon gemacht, aber ich hab keine Ahnung wie ich den String vertikal zeichnen kann. Hab auch nichts gefunden wie ich das im GC einstellen kann (aber irgendwie muss es ja gehen).
 

Vatar

Bekanntes Mitglied
Hab in den tiefen des Netzes noch etwas gefunden.

Hilfsklasse GraphicsUtils
Code:
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.Display;

/**
 * This class contains utility methods for drawing graphics
 */
public class GraphicsUtils {
  /**
   * Draws text vertically (rotates plus or minus 90 degrees). Uses the current
   * font, color, and background.
   * <dl>
   * <dt>[b]Styles: [/b]</dt>
   * <dd>UP, DOWN</dd>
   * </dl>
   * 
   * @param string the text to draw
   * @param x the x coordinate of the top left corner of the drawing rectangle
   * @param y the y coordinate of the top left corner of the drawing rectangle
   * @param gc the GC on which to draw the text
   * @param style the style (SWT.UP or SWT.DOWN)
   *          


   *          Note: Only one of the style UP or DOWN may be specified.
   *          </p>
   */
  public static void drawVerticalText(String string, int x, int y, GC gc,
      int style) {
    // Get the current display
    Display display = Display.getCurrent();
    if (display == null) SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);

    // Determine string's dimensions
    FontMetrics fm = gc.getFontMetrics();
    Point pt = gc.textExtent(string);

    // Create an image the same size as the string
    Image stringImage = new Image(display, pt.x, pt.y);

    // Create a GC so we can draw the image
    GC stringGc = new GC(stringImage);

    // Set attributes from the original GC to the new GC
    stringGc.setForeground(gc.getForeground());
    stringGc.setBackground(gc.getBackground());
    stringGc.setFont(gc.getFont());

    // Draw the text onto the image
    stringGc.drawText(string, 0, 0);

    // Draw the image vertically onto the original GC
    drawVerticalImage(stringImage, x, y, gc, style);

    // Dispose the new GC
    stringGc.dispose();

    // Dispose the image
    stringImage.dispose();
  }

  /**
   * Draws an image vertically (rotates plus or minus 90 degrees)
   * <dl>
   * <dt>[b]Styles: [/b]</dt>
   * <dd>UP, DOWN</dd>
   * </dl>
   * 
   * @param image the image to draw
   * @param x the x coordinate of the top left corner of the drawing rectangle
   * @param y the y coordinate of the top left corner of the drawing rectangle
   * @param gc the GC on which to draw the image
   * @param style the style (SWT.UP or SWT.DOWN)
   *          


   *          Note: Only one of the style UP or DOWN may be specified.
   *          </p>
   */
  public static void drawVerticalImage(Image image, int x, int y, GC gc, int style) {
    // Get the current display
    Display display = Display.getCurrent();
    if (display == null) SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);

    // Use the image's data to create a rotated image's data
    ImageData sd = image.getImageData();
    ImageData dd = new ImageData(sd.height, sd.width, sd.depth, sd.palette);

    // Determine which way to rotate, depending on up or down
    boolean up = (style & SWT.UP) == SWT.UP;

    // Run through the horizontal pixels
    for (int sx = 0; sx < sd.width; sx++) {
      // Run through the vertical pixels
      for (int sy = 0; sy < sd.height; sy++) {
        // Determine where to move pixel to in destination image data
        int dx = up ? sy : sd.height - sy - 1;
        int dy = up ? sd.width - sx - 1 : sx;

        // Swap the x, y source data to y, x in the destination
        dd.setPixel(dx, dy, sd.getPixel(sx, sy));
      }
    }

    // Create the vertical image
    Image vertical = new Image(display, dd);

    // Draw the vertical image onto the original GC
    gc.drawImage(vertical, x, y);

    // Dispose the vertical image
    vertical.dispose();
  }

  /**
   * Creates an image containing the specified text, rotated either plus or minus
   * 90 degrees.
   * <dl>
   * <dt>[b]Styles: [/b]</dt>
   * <dd>UP, DOWN</dd>
   * </dl>
   * 
   * @param text the text to rotate
   * @param font the font to use
   * @param foreground the color for the text
   * @param background the background color
   * @param style direction to rotate (up or down)
   * @return Image
   *         


   *         Note: Only one of the style UP or DOWN may be specified.
   *         </p>
   */
  public static Image createRotatedText(String text, Font font, Color foreground,
      Color background, int style) {// Get the current display
    Display display = Display.getCurrent();
    if (display == null) SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);

    // Create a GC to calculate font's dimensions
    GC gc = new GC(display);
    gc.setFont(font);

    // Determine string's dimensions
    FontMetrics fm = gc.getFontMetrics();
    Point pt = gc.textExtent(text);

    // Dispose that gc
    gc.dispose();

    // Create an image the same size as the string
    Image stringImage = new Image(display, pt.x, pt.y);

    // Create a gc for the image
    gc = new GC(stringImage);
    gc.setFont(font);
    gc.setForeground(foreground);
    gc.setBackground(background);

    // Draw the text onto the image
    gc.drawText(text, 0, 0);

    // Draw the image vertically onto the original GC
    Image image = createRotatedImage(stringImage, style);

    // Dispose the new GC
    gc.dispose();

    // Dispose the horizontal image
    stringImage.dispose();

    // Return the rotated image
    return image;
  }

  /**
   * Creates a rotated image (plus or minus 90 degrees)
   * <dl>
   * <dt>[b]Styles: [/b]</dt>
   * <dd>UP, DOWN</dd>
   * </dl>
   * 
   * @param image the image to rotate
   * @param style direction to rotate (up or down)
   * @return Image
   *         


   *         Note: Only one of the style UP or DOWN may be specified.
   *         </p>
   */
  public static Image createRotatedImage(Image image, int style) {
    // Get the current display
    Display display = Display.getCurrent();
    if (display == null) SWT.error(SWT.ERROR_THREAD_INVALID_ACCESS);

    // Use the image's data to create a rotated image's data
    ImageData sd = image.getImageData();
    ImageData dd = new ImageData(sd.height, sd.width, sd.depth, sd.palette);

    // Determine which way to rotate, depending on up or down
    boolean up = (style & SWT.UP) == SWT.UP;

    // Run through the horizontal pixels
    for (int sx = 0; sx < sd.width; sx++) {
      // Run through the vertical pixels
      for (int sy = 0; sy < sd.height; sy++) {    // Determine where to move pixel to in destination image data
        int dx = up ? sy : sd.height - sy - 1;
        int dy = up ? sd.width - sx - 1 : sx;

        // Swap the x, y source data to y, x in the destination
        dd.setPixel(dx, dy, sd.getPixel(sx, sy));
      }
    }

    // Create the vertical image
    return new Image(display, dd);
  }
}
Und noch mein PaintListener
Code:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

import util.GraphicsUtils;



/**
 * @author prakew
 */
public class ControlCompositePaint implements PaintListener {
    
    private final Image choiceText;
    private final Image selectionText;
    private final Font font;
    
    public ControlCompositePaint(Shell shell){
        font = new Font(shell.getDisplay(), new FontData("Arial", 10, SWT.BOLD));
        choiceText = GraphicsUtils.createRotatedText("Vorhandene DataObjects", font,
                shell.getForeground(), shell.getBackground(), SWT.DOWN);
        selectionText = GraphicsUtils.createRotatedText("Ausgewählte DataObjects", font,
                shell.getForeground(), shell.getBackground(), SWT.DOWN);
    }// end Constructor

    
    public void paintControl( PaintEvent event ) {
        // Display aus Ereignis holen
        Display display = event.display;
        // Das Ereignis liefert auch den Grafikkontext
        GC gc = event.gc;
       
        Composite composite = (Composite)event.widget;
        // Alle Controls aus der Composite holen
        Control [] c_array = composite.getChildren();
        
        // linker ListViewer
        Control c1 = c_array[0];
        Point p1 = c1.getLocation();

        // rechter ListViewer
        Control c2 = c_array[1];
        Point p2 = c2.getLocation();
        
              
       gc.drawImage(choiceText, p1.x - 20, p1.y);
       gc.drawImage(selectionText, p2.x - 20, p2.y);
    }// endmethod

}// end Class
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
hdi SWT Label Text vertikal zentrieren AWT, Swing, JavaFX & SWT 6
DeeDee0815 SWT Label horizontal und vertikal zentrieren AWT, Swing, JavaFX & SWT 7
H JavaFX Label.Text mit bind an DoubleProperty binden AWT, Swing, JavaFX & SWT 3
izoards Ausdruck auf Label Drucker AWT, Swing, JavaFX & SWT 1
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
H RPG Programmieren, label.setLocation funktioniert nicht AWT, Swing, JavaFX & SWT 7
Jose05 Javafx Label Höhe=Breite AWT, Swing, JavaFX & SWT 1
N javafx Position der Bustaben finden label AWT, Swing, JavaFX & SWT 1
N Label Schriftart Ändern javafx AWT, Swing, JavaFX & SWT 2
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J JavaFX Label aktualisieren AWT, Swing, JavaFX & SWT 18
M JavaFX javaFX Label-Text wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
I BoxLayout zentriert Label nicht AWT, Swing, JavaFX & SWT 7
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
R JavaFX Label oder Imageview anzeigen mit Buttonklick AWT, Swing, JavaFX & SWT 4
L Label im JavaFX Thread Updaten AWT, Swing, JavaFX & SWT 3
A Inhalt wechseln bei Klick auf Label AWT, Swing, JavaFX & SWT 8
ralfb1105 JavaFX Label lässt sich innerhalb service Task nicht updaten? AWT, Swing, JavaFX & SWT 22
Trèfle JavaFX Formattierung im Label AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Wie Text Label in neuem Window von Main Stage setzen? AWT, Swing, JavaFX & SWT 6
F Countdown in Label anzeigen AWT, Swing, JavaFX & SWT 14
H JavaFX - Label aktualisieren AWT, Swing, JavaFX & SWT 1
J Dateiname im Label einblenden AWT, Swing, JavaFX & SWT 4
C SWT autosize bei gc.drawString() auf einem Label AWT, Swing, JavaFX & SWT 7
xYurisha Aus einer Gui Buttons, Label und ProgessBars entfernen AWT, Swing, JavaFX & SWT 4
T Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
zhermann FX Label text wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 12
zhermann NullPointerException bei Label.setText() AWT, Swing, JavaFX & SWT 5
T JavaFX Label mit mehreren Images AWT, Swing, JavaFX & SWT 11
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
L JavaFX ContextMenu bei Label mit Linksklick AWT, Swing, JavaFX & SWT 4
J JavaFX - Felder (Label) in einer ForSchleife bearbeiten AWT, Swing, JavaFX & SWT 4
N Anordnung der Label AWT, Swing, JavaFX & SWT 3
N Swing Label auf Panel legen.. AWT, Swing, JavaFX & SWT 2
D JavaFX Label lässt sich nicht mehrmals färben AWT, Swing, JavaFX & SWT 7
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
M Text in einem Label fett setzen AWT, Swing, JavaFX & SWT 4
D Swing JFreeChart Crosshair Label - setPreferredSize oder ähnliches, aber wo ? AWT, Swing, JavaFX & SWT 1
T CSS Rechtsbüdniges Label mit Zwei Zeilen AWT, Swing, JavaFX & SWT 7
J JavaFX Translation Text/Label AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX Text oder Label benutzen AWT, Swing, JavaFX & SWT 4
C Textfeld und Label werden nicht angezeigt (Ubuntu) AWT, Swing, JavaFX & SWT 2
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
Augenblau JavaFX Wechselnde Werte in Label darstellen AWT, Swing, JavaFX & SWT 7
V Swing Brauche Hilfe mit Label AWT, Swing, JavaFX & SWT 3
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
M label mit icon verschieben. AWT, Swing, JavaFX & SWT 1
B Swing JXMapKit Mausemove in Label anzeigen AWT, Swing, JavaFX & SWT 0
K Bild in Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
G Label wird nicht erstellt AWT, Swing, JavaFX & SWT 0
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4
W JavaFX Label in Controller-Klasse in einer anderen Controller-Klasse ändern AWT, Swing, JavaFX & SWT 9
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
G Label erstellen AWT, Swing, JavaFX & SWT 6
U Label zeigt nicht überall HTML Zeichen AWT, Swing, JavaFX & SWT 3
F JavaFX label.getWidth() AWT, Swing, JavaFX & SWT 2
T Swing Label aus anderer Methode bearbeiten AWT, Swing, JavaFX & SWT 2
N Input/Output Stream werte in Label anzeigen. AWT, Swing, JavaFX & SWT 6
R JavaFX Label ändern in aufgerufener AnchorPane AWT, Swing, JavaFX & SWT 3
B Swing label.setText() macht probleme AWT, Swing, JavaFX & SWT 5
G JavaFX CSS: Label in GridPane rechts ausrichten AWT, Swing, JavaFX & SWT 9
T Swing Aktuelle Größe eines Textes in einem Label darstellen AWT, Swing, JavaFX & SWT 3
KrokoDiehl Swing Buchstaben im Label anders färben AWT, Swing, JavaFX & SWT 4
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
P Label rotieren mit Timer AWT, Swing, JavaFX & SWT 5
C Label wird nicht an der richtigen Position angezeigt.. AWT, Swing, JavaFX & SWT 7
H Label mit Icon positionieren AWT, Swing, JavaFX & SWT 14
E Netbeans: Buttons mit Label bzw. Rahmen unterlegen AWT, Swing, JavaFX & SWT 8
J resize - Label bleibt erst schwarz AWT, Swing, JavaFX & SWT 4
T label überschriebt seine werte-SWT AWT, Swing, JavaFX & SWT 3
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3
N Label auf Hauptfenster manipulieren AWT, Swing, JavaFX & SWT 2
S VAADIN: Problem mit Label AWT, Swing, JavaFX & SWT 18
P Ausgabe Label AWT, Swing, JavaFX & SWT 6
GUI-Programmer Informations-Panel an Label AWT, Swing, JavaFX & SWT 2
S ImageIcon von Label entfernen AWT, Swing, JavaFX & SWT 9
B Label breite ermitteln vor dem rendern? AWT, Swing, JavaFX & SWT 7
A Bekomme das Label nicht in die Mitte von Reihe AWT, Swing, JavaFX & SWT 7
H SWT Markierbares Label AWT, Swing, JavaFX & SWT 8
A Swing Box Label ausrichten AWT, Swing, JavaFX & SWT 3
R Label in den Vordergrund einblenden AWT, Swing, JavaFX & SWT 5
J Hintergrund Label-Frame AWT, Swing, JavaFX & SWT 3
O Swing Label(bzw. Grafik) verdekt von anderm Label AWT, Swing, JavaFX & SWT 2
A TextField und Label AWT, Swing, JavaFX & SWT 8
L Label dynamisch awt AWT, Swing, JavaFX & SWT 2
J Label mit transparentem hintergrund - geht das? AWT, Swing, JavaFX & SWT 21
B Die Werte von getLocation() im Label anzeigen AWT, Swing, JavaFX & SWT 4
Avalarion SWT Listener auf Label oder Text Teile AWT, Swing, JavaFX & SWT 10
C Label Hintergrundbild mit Text AWT, Swing, JavaFX & SWT 6
A SWT - Farbe von Text auf Label ändern AWT, Swing, JavaFX & SWT 2
M gridbaglayout - abstand bei label und field AWT, Swing, JavaFX & SWT 8
T In einem Label scrollen AWT, Swing, JavaFX & SWT 3
Spot84 swt label zeilenumbruch will nicht funktionieren AWT, Swing, JavaFX & SWT 1
L JFreeChar Label für StackedBar AWT, Swing, JavaFX & SWT 3
lumo SWT Label - onResize? AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben