Beschriftete Linie in Java 2D

Status
Nicht offen für weitere Antworten.

Octavian

Mitglied
Hallo,

Hab grad folgendes Problem...

Ich zeichne in einem JPanel mehre Linien und will jede Linie nun beschriften. Das Problem ist, die Linien sind nicht immer Horizontal und die Start und Endpunkte der Linien werden erst zur Laufzeit berechnet.
drawString zeichnet einne Text ja aber nur horizontal hin.

Bin leider kein so großer Profi mit Java 2D und steh grad ziemlich auf dem Schlauch wie ich das angehen könnte. Hab mir überlegt den Text zu rotieren, aber ich wüsste nicht recht mit welchen Parametern.

Würde mich über jede Hilfe freuen!!

MfG,
Jan.
 
B

Beni

Gast
Da kann die Methode Graphics2D.rotate helfen, aber lies besser in der API nach, wie man sie verwendet.

Die Drehung wird dann auf *alles* angewendet, was später gezeichnet wird.
 

Octavian

Mitglied
Das ich die gleich wieder umkehren muss hab ich auch schon mitbekommen, dass ist net so das Problem.
Hatte nur gehofft da gibt es vielleicht ne halbwegs einfache Lösung, weil ich im Winkelrechnen nicht mehr so fit bin und grad nicht mehr so recht weiß wie ich jetzt zu einer gegebenen Linie den Text an die richtige Stelle bekomme...
 
K

kaie

Gast
Hallo! Hier habe ich ein kleines Beispielprogramm geschrieben, das beschriftete Linien in einem Vollkreis zeichnet. Der Text wird automatisch so gedreht, dass er immer über der Linie steht. Die Transformationen werden direkt nach dem Anwenden wieder zurückgesetzt, danach kann also wie zuvor weiter gezeichnet werden. Das Anti-Aliasing kann natürlich auch ausgeschaltet bleiben, dann sieht's aber nicht ganz so gut aus.

Code:
import java.awt.*;
import java.awt.geom.*;

public class TextLinienBeispiel extends Canvas
{
    public static void main(String[] args)
    {
        // Frame mit Canvas erzeugen
        Frame f = new Frame();
        f.add(new LineText());
        f.setSize(600, 600);
        f.setVisible(true);
    }

    public void paint(Graphics g)
    {
        // Beispielfigur
        for (int w = 0; w < 360; w += 10)
        {
            int x1 = (int) (300 + 75 * Math.cos(-w * Math.PI / 180));
            int y1 = (int) (300 + 75 * Math.sin(-w * Math.PI / 180));
            int x2 = (int) (300 + 250 * Math.cos(-w * Math.PI / 180));
            int y2 = (int) (300 + 250 * Math.sin(-w * Math.PI / 180));

            // hier kommt die eigentliche Methode
            textlinie((Graphics2D) g, w + "°", x1, y1, x2, y2);
        }
    }

    public void textlinie(Graphics2D g, String s, int x1, int y1, int x2,
            int y2)
    {
        // Anti-Aliasing an
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);

        // Linie zeichnen
        g.drawLine(x1, y1, x2, y2);

        // Koordinatensystem drehen
        AffineTransform alt = g.getTransform(); 
        AffineTransform neu = new AffineTransform();
        neu.translate((x1 + x2) / 2, (y2 + y1) / 2);
        neu.rotate(Math.atan((1.0 * y2 - y1) / (x2 - x1)));
        g.setTransform(neu);

        // Text einzeichnen
        FontMetrics f = g.getFontMetrics();
        g.drawString(s, -f.stringWidth(s) / 2, -2);

        // Koordinatensystem zurücksetzen
        g.setTransform(alt);
    }
}

Hoffe, das hilft Dir bei Deinem Problem.

KaiE
 

Octavian

Mitglied
Ahhh, grad erst gesehen...

Ziemlich genialer Code, hab den so ziemlich genau so übernommen und vom Prinzip her passt das perfekt!

Leider hab ich jetzt noch ein kleines Problem...
Meine Zeichnung kann unterschiedlich groß werden und liegt daher in einem ScrollPanel. Wenn ich jetzt scrolle, bewegt sich die Schrift dummerweise mit und damit natürlich auch weg von ihren Linien... Das werd ich wohl noch unter Kontreolle bekommen müssen. Habs mir aber selber noch net genau angeguckt, werd ich jetzt gleich machen.

Aber auf jeden Fall großes Danke!

Cu,
Jan.
 

kaie

Bekanntes Mitglied
Sorry, im Quelltext ist natürlich noch ein Fehler versteckt: hatte in letzter Sekunde die Klasse umbenannt, und dabei eine Zeile vergessen. Zeile 10 müsste lauten:

Code:
f.add(new TextLinienBeispiel());

Das kommt davon, wenn man Refactoring per Hand durchführt! :roll:

KaiE
 

Octavian

Mitglied
Das ist mir ehrlichgesagt gar nicht aufgefallen, da ich die Funktion zum Linienzeichnen einfach in mein Programm übernommen habe und das ausprobiert habe.

Hat auch sehr gut funktioniert, bis auf das Problem mit dem Scrollen...
Bisher hab ich leider noch keinen Weg gefunden das zu verhindern... Evt. noch ne Ahnung wie man das umgehen könnte?
 

kaie

Bekanntes Mitglied
Hallo nochmal,

habe mir das Programm nochmal mit JScrollPane angesehen, und es funktioniert damit tatsächlich nicht. Aber nach kurzem Rumtüfteln mit den Transformationen klappt's jetzt doch: Du musst nur die beiden Zeilen in der Methode textlinie mit folgenden Zeilen ersetzen:

Code:
        AffineTransform neu = g.getTransform();
        AffineTransform alt = (AffineTransform)neu.clone();

Dann sollte es eigentlich funktionieren. Viel Spass damit wünscht

KaiE
 

Fabian23

Aktives Mitglied
Hallo KaiE,

besten Dank für deine tolle Beispielanwendung. Wir haben das Ganze mal nett adaptiert :)

Grüße,
Fabian
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Punkt auf Linie Spiele- und Multimedia-Programmierung 5
A Verpixelte Linie Spiele- und Multimedia-Programmierung 1
aze Schnittmenge zwischen Linie und einer Area wegschneiden Spiele- und Multimedia-Programmierung 3
L Kreis auf Linie platzieren (-> Koordinatentransformation?) Spiele- und Multimedia-Programmierung 7
Developer_X Colisionserkennung Punkt -> Linie || Linie -> Linie Spiele- und Multimedia-Programmierung 5
M Linie - kurvige Linie Kollisonserkennung bei Polygonen Spiele- und Multimedia-Programmierung 8
N Linie mit Rand zeichnen Spiele- und Multimedia-Programmierung 10
B Linie verankern in Java3D Spiele- und Multimedia-Programmierung 2
G Linie im Applet zeichnen Spiele- und Multimedia-Programmierung 5
P linie in bild zeichnen Spiele- und Multimedia-Programmierung 2
H Eine gestrichelte Linie Spiele- und Multimedia-Programmierung 3
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
A Minecraft Java Buch fehlermeldung Spiele- und Multimedia-Programmierung 67
yakazuqi Minecraft java.lang.Error: Watchdog Spiele- und Multimedia-Programmierung 3
L Fehler bei "Nochmal Spielen" (Java) Spiele- und Multimedia-Programmierung 1
N Minecraft Java Error Spiele- und Multimedia-Programmierung 6
M "Java Datei" Cannot be resolved to a variable Spiele- und Multimedia-Programmierung 2
1Spinne Minecraft Fabric Modding Java Error Spiele- und Multimedia-Programmierung 2
Joris Minecraft Minecraft Java Server Spiele- und Multimedia-Programmierung 6
Shanic Minecraft Minecraft Forge Server "Falsche Java Version" Spiele- und Multimedia-Programmierung 6
O Browser-basiertes online Pokerspiel mit Java Spiele- und Multimedia-Programmierung 1
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
G VST-Plugins in Java verwenden Spiele- und Multimedia-Programmierung 0
P Audio Visualizer mit OpenGL in Java? Spiele- und Multimedia-Programmierung 4
P Snake Java Hilfe Spiele- und Multimedia-Programmierung 4
D Minecraft [Minecraft] Java Start Fehler (Core-Dump) Spiele- und Multimedia-Programmierung 1
T Welche packages aus der java api doku ist hilfreich zur Android Spieleprogrammierung Spiele- und Multimedia-Programmierung 2
A Programmieren eines Memorys mit Java (in Eclipse) Spiele- und Multimedia-Programmierung 5
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
C Java findet FluidSynth nicht Spiele- und Multimedia-Programmierung 2
I Java Andere Fenster in Borderless-Mode setzen Spiele- und Multimedia-Programmierung 16
leon_krys Java-Bußgeldrechner Spiele- und Multimedia-Programmierung 5
G [Java/KryoNet/LibGDX] Mutliplayer Packet Frage Spiele- und Multimedia-Programmierung 2
P Website mit Java Backend? Spiele- und Multimedia-Programmierung 1
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
J Fertigungstechnik.. PLS HALP.. Quellcode vom Text in java-Klasse speichern Spiele- und Multimedia-Programmierung 2
E Kalah Java Implementation Spiele- und Multimedia-Programmierung 1
G [Java] Vereinfachung von Boolean Abfragen Spiele- und Multimedia-Programmierung 3
G [LibGDX/Java] ArrayList Object Speicher Spiele- und Multimedia-Programmierung 3
T Java 3D Spiele- und Multimedia-Programmierung 2
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
J Java Buttons Spiele- und Multimedia-Programmierung 6
T Java Kalender Spiele- und Multimedia-Programmierung 5
Ice4P4rty Java Optische Oberfläche Spiele- und Multimedia-Programmierung 2
MABY Eine mp3 Datei in Java abspielen Spiele- und Multimedia-Programmierung 14
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
N Spiele-Menü in Java Spiele- und Multimedia-Programmierung 9
J HDMI Ausgänge mit Java programmieren? Spiele- und Multimedia-Programmierung 18
H Yu-Gi-Oh! Mit Java was tun? Spiele- und Multimedia-Programmierung 6
G Component System Java 2D Game LibGDX Spiele- und Multimedia-Programmierung 6
S Pong java.lang.StackOverflowError Spiele- und Multimedia-Programmierung 3
C Java aus Klasse rausgehen Spiele- und Multimedia-Programmierung 2
MaxG. Java Internet Radio Spiele- und Multimedia-Programmierung 6
G [Java Server] Allgemeine Frage zum Thema Networking in Videospielen Spiele- und Multimedia-Programmierung 15
P java.lang.NoClassDefFoundError: in Greenfoot Spiele- und Multimedia-Programmierung 0
G Java Achsen invertieren Spiele- und Multimedia-Programmierung 2
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
$ Einstieg in Java Game Development Spiele- und Multimedia-Programmierung 11
BraunBerry Java Game Pixel "einfärben" Spiele- und Multimedia-Programmierung 6
BraunBerry Java Game verbesserte Kollisionserkennung Spiele- und Multimedia-Programmierung 18
BraunBerry Java Game Waypoint System Spiele- und Multimedia-Programmierung 3
S Hilfe bei Java Gui Spiele- und Multimedia-Programmierung 2
D Java sound pulseaudio Spiele- und Multimedia-Programmierung 0
David Schwarzbeck Java 3 dimensionale Kollisions Abfrage Spiele- und Multimedia-Programmierung 2
M Gesellschaftsspiel Mühle in Java programmieren Spiele- und Multimedia-Programmierung 3
beatles Java Minesweeper - OS X und Win7 Unterschied Spiele- und Multimedia-Programmierung 2
D Minecraft Java JDK installiert - Minecraft läuft nichtmehr in 64 Bit Spiele- und Multimedia-Programmierung 2
E TMX - Dateien in Java laden Spiele- und Multimedia-Programmierung 1
K Erstellen eines Fotoalbums mit Java Spiele- und Multimedia-Programmierung 8
windl MoviePlayer in Java Spiele- und Multimedia-Programmierung 0
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
F Klausurersatz: Ein Java-Programm erstellen und dieses präsentieren. Spiele- und Multimedia-Programmierung 2
E Java Jump and Run Map zu groß Spiele- und Multimedia-Programmierung 14
P java lwjgl Game Spiele- und Multimedia-Programmierung 0
J programm mit java-plugin Spiele- und Multimedia-Programmierung 2
D Java Webgame, welche Frameworks oder Techs sind von Nöten? Spiele- und Multimedia-Programmierung 5
P Java 2D Bug? Spiele- und Multimedia-Programmierung 8
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
R Java App sendet Midi Daten über Flash Spiele- und Multimedia-Programmierung 3
O Java Zeile aus Textdatei zufällig ausgeben Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
T Alle Referenzen zu einer Klasse aus Java Bytecode ersetzt, JVM sucht trotzdem diese Klasse Spiele- und Multimedia-Programmierung 1
J Java Kollisionsabfrage Spiele- und Multimedia-Programmierung 21
Flo. android java tastatureingaben abfangen. Spiele- und Multimedia-Programmierung 1
J Java Steuerberechnung hilfe Spiele- und Multimedia-Programmierung 17
C Export als .jar funktioniert nicht richtig (JAVA 3D) Spiele- und Multimedia-Programmierung 5
P Java Grafiken mit Rechnungen verknüpfen Spiele- und Multimedia-Programmierung 4
U Minecraft Mit Java auf Minecraft Server anmelden Spiele- und Multimedia-Programmierung 11
F Das sag mir einer Java ist plattform unabhänig ! Spiele- und Multimedia-Programmierung 10
C virtueller stereomix (java sound API) Spiele- und Multimedia-Programmierung 0
S Engine2D - Java 2D Engine Spiele- und Multimedia-Programmierung 20
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
C Java Kollisionserkennung Spiele- und Multimedia-Programmierung 4
U Blender in Java Spiele- und Multimedia-Programmierung 8
J Java Fussballspiel Player-KI in der Bewegungsphase Spiele- und Multimedia-Programmierung 4
K Java 15/Slide/Boss Puzzle Spiele- und Multimedia-Programmierung 2
T Java 3D - Step oder IGES Spiele- und Multimedia-Programmierung 1
H 3D Spiele mit Java - Diskussion Spiele- und Multimedia-Programmierung 35
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1

Ähnliche Java Themen


Oben