# Geschwungene Klammer zeichnen



## Gast (21. Aug 2008)

Hallo!

Hoffe ihr könnt mir helfen, ich suche für Java eine Funktion oder Codestück mit dem ich eine geschwungene Klammer zeichnen kann ( { ). Am besten eine wo ich Höhe und Breite der Klammer mit angeben kann.


```
o Punkt 1
{   o Punkt 2
    o Punkt 3
```

Die Klammer soll über alle Punkte der Liste gehen. Ich hab schon probiert einfach die Schriftgröße einer { zu erhöhen, hat mir aber nicht gefallen.

Also irgendwie so:


```
g.drawKlammer( width, height );
```

Danke im voraus.

mfg gast


----------



## Illuvatar (21. Aug 2008)

Naja, sagen wir so, du kannst nicht erwarten dass es in Java für alle möglichen Zeichen (¡“¶¢[]|{}≠¿'¬”#£ﬁ^\˜·¯˙≥‡«∑€®†Ω¨⁄øπ•±‘æœ@∆ºª©ƒ∂‚≈ç√∫~µ∞) noch ne extra-Funktion gibt. Und wenn es die gäbe, warum sollte die etwas anderes machen, als drawString? Warum gefällt dir das nicht mit Schriftgröße erhöhen? Vielleicht mal ne andere Schriftart probieren?


----------



## Gast (21. Aug 2008)

schaut alles einfach nicht so aus wie ich will.

in word gibts ja einfügen --> form --> { . das kann eigentlich alles was ich will und schaut auch so aus wie ich will. man kann breite, höhe und strichstärke einstellen.

mir is schon klar dass java nicht alles implementieren kann, aber vielleicht gibts irgendeine bibliothek oder man kann sich das irgendwie selbst basteln. war ja auch kein vorwurf an java.


----------



## 0x7F800000 (21. Aug 2008)

@Illuvatar:
Nein, das was der gast will muss etwas prinzipiell etwas ganz anderes machen, als drawString().
drawString() zeichnet nur symbole, bei den sich die proportionen [im wesentlichen] nicht verändern. Wenn sich eine solche Klammer über eine Zeile erstreckt, ist sie zB etwa einen pixel breit. Soll die klammer sich nun über 10 zeilen erstrecken, so bekommt man mit drawString() statt einer genauso zierlichen Klammer ein riesiges Skalierungsprodukt, das 10 mal dicker ist, als die Klammer für eine Zeile. Deswegen muss man da anders vorgehen, denn diese mathematischen Symbole verändern ständig die proportionen. Einige bereiche dürfen gestreckt werden, andere nicht.

@Gast:
wenn du eine klasse erstellen willst, die solche teilweise-skalierbaren symbole darstellen kann, musst du dir erst mal ziemlich viele gedanken darüber machen, wie du die nötigen informationen über das symbol überhaupt abspeicherst. Da wäre schon ein ziemlich komplizierter ansatz nötig, denn eigentlich müsste man verschiedene Teile des symbols mit einem "gridBagLayout-ähnlichen" System auf der verfügbaren zeichenfläche verteilen, das ist wahrscheinlich schon ziemlich viel aufwand, wenn man's allgemein halten will.

Geht es dir aber nur darum, diese eine doofe klammer zu zeichnen: nun ja, dann schnapp dir eben ein paar awt-buntstifte und mal die doch einfach hin, diese konkrete form an sich ist zum glueck nicht allzu kompliziert:

```
import java.awt.*;
import javax.swing.*;

public class ResizableCurlyBracket extends JApplet{
	
	public static void drawCurlyBracket(Graphics g, int x, int y, int w, int h){
		int r=w/2;
		g.drawArc(x+r, y, 		w, w,	90, 90);
		g.drawArc(x-r-1, y+h/2-w,	w, w,	-90,90);
		g.drawArc(x-r-1, y+h/2, 	w, w, 	0,  90);
		g.drawArc(x+r, y+h-w, 	w, w, 	180,90);
		g.drawLine(x+r, y+r, x+r, y+h/2-r);
		g.drawLine(x+r, y+h/2+r, x+r, y+h-r);
	}
	
	public void paint(Graphics g){
		g.setColor(Color.WHITE);
		g.fillRect(0,0,getWidth(),getHeight());
		g.setColor(Color.BLACK);
		for(int i=0; i<20; i++){
			drawCurlyBracket(g,20+i*40,20,40-i,80+i*20);
		}
	}
}
```
Das ist dann natuerlich alles andere als allgemein, kaum erweiterbar, kaum wiederverwendbar, aber fuer einfachere probleme könnte es evtl ausreichen.


----------



## Marco13 (22. Aug 2008)

Hm. Mein erster Gedanke wäre da einen GeneralPath zu erstellen (mit cubicTo und quadTo, für die Rundungen). Den kann man leicht Skalieren, drehen, wasWeißIch, und mit einem beliebigen Stroke zeichnen und so...


----------



## 0x7F800000 (22. Aug 2008)

da kann man aber auch nicht kontrollieren, dass die zeichen an manchen stellen unverändert bleiben, und an manchen auseinandergezogen werden...


----------

