java grafikausgabe mit swing
-
Naja ansich steht ohnehin in beiden Posts das selbe
ja bis auf das man normalerweise sowiseo JTextPane verwenden sollt. Man spart sich ne Menge Arbeit ein Wenn man alles selber macht muß man sich auch noch um Dinge wie Caret (TextCursor) Gedanken machen.. is ne Sauarbeit
-
ja bis auf das man normalerweise sowiseo JTextPane verwenden sollt. [...] is ne Sauarbeit
Stimmt. Ich weiß auch, wieviel Arbeit das ist, ich habe nämlich mal nen HTML-Editor geschrieben. Das war extrem viel Aufwand, bis das alles geparst war. Vorallem die Performance macht einem da richtig viel Schwierigkeiten. Und das ganze wie Cursor, Markierungen, Syntax-Highlighting, Tag-Insight, ... macht einfach nur viel Arbeit...
Ich habe ihm das JTextPane eigentlich gar nicht vorgeschlagen, weil ich angenommen habe, dass er es selber machen will.
-
Wollt auch mal nen HTML-Parser+Viewer schreiben, war dann aber zu faul
tom07 hat ja gepostet, daß er sich nicht mit Swing auskennt, deswegen geh ich mal davon aus, daß er gar nicht wußte daß es sowas wie JTextPane gibt..
-
hi crass !
tatsächlich hab ich nicht viel ahnung von swing aber wir müssen genau die sache alle selber machen also auch den textcursor.ich werd die sache nun mal ausprobieren.
mfg
tom
-
hi nochmal!
also ich hab mal folgendes gemacht :
import java.awt.*; import javax.swing.*; import java.util.*; public class GraphicComponent extends JComponent { private Vector words; public GraphicComponent(Vector words) { this.words = words; } public void paintComponent(Graphics g) { g.drawString("test text", 30,30); } public void printWords() { repaint(); } }
und dann die methode aus der klasse die das ganze behandelt:
private void addGraphicComponent() { Container contentPane = getContentPane(); GraphicComponent gComponent = new GraphicComponent(words); JPanel panelForText = new JPanel(); JScrollPane scrollPane = new JScrollPane (panelForText); panelForText.setPreferredSize(new Dimension(600,350)); panelForText.setBackground(Color.white); panelForText.add(gComponent); contentPane.add(panelForText , BorderLayout.CENTER ); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); contentPane.add( scrollPane ,BorderLayout.SOUTH); gComponent.printWords(); }
allerdings habe ich nun zwei probleme. zum einen ist die jscrollpane verschwunden und zum anderen wird auch nichts gezeichnet. das panel wird jedoch richtig initialisiert.
was hab ich denn nun schon wieder falsch gemacht ???mfg
tom
-
Hi, hab das ganze mal etwas für dich umgeschrieben, jetzt funktioniert es soweit ..du hattest u.A JScrollPane falsch verwendet (JScrollPane ist ein Container für andere Comps , keine ScrollBar )
class GraphicComponent extends JComponent { private Vector words; public GraphicComponent(Vector words) { this.words = words; } public void clearBackground(Graphics g) { Graphics copG=g.create(); copG.setColor(getBackground()); copG.fillRect(0,0,getWidth(),getHeight()); } public void paintComponent(Graphics g) { clearBackground(g); //JPanel hat das Background löschen schon auto drin //mit nem Aufruf von super.paintComponent() g.drawString("test text", 30,30); } public void printWords() { repaint(); } } private void addGraphicComponent() { Container contentPane = getContentPane(); GraphicComponent gComponent = new GraphicComponent(words); gComponent.setPreferredSize(new Dimension(600,350)); gComponent.setBackground(Color.white); JScrollPane scrollPane = new JScrollPane (gComponent); contentPane.add( scrollPane ,BorderLayout.CENTER); gComponent.printWords(); }
[ Dieser Beitrag wurde am 03.07.2003 um 21:02 Uhr von crass editiert. ]
-
hi crass !
vielen dank. leider habe ich das gefühl ,dass ich immer weniger bei der sache mit grafikausgabe unter java verstehe. gibt es vielleicht ein vernünftiges buch was einem sowas mal erklärt. weil ehrlich gesagt find ich den ansatz den du jetzt grad beschrieben hast ziemlich unintuitiv. oder vielleicht wie kann ich mir abstrakt gesehen das object graphics vorstellen ??mfg
tom
-
Graphics ist das Objekt, das du dir wie einen Bildschrirm vorstellen kannst. Du kannst die Farbe bestimmen, dann Flächen, Linien, ..., Strings zeichenn und am Ende der paintComponent() wird das ganze, was du auf dem Graphics-Objekt gemacht hast für dich von java auf den Bildschirm gebracht.
Jetz mal ganz abstrakt
-
Ich hab in clearBackground das Graphics-Objekt kopiert (mit create() ) damit sich die Änderungen an dem Objekt (in diesem Fall nur die Zeichenfarbe) nicht auch in paintComponent auswirken.. du kannst das auch anders machen..
wenn du dich mit Java allgemein noch nicht so gut auskennst, kann ich dir als Buch "Handbuch der Java-Programmierung" von Guido Krüger empfehlen. Speziell für Swing hab ich das Buch "Java Swing" vom O'Reilly - Verlag (mehrere Autoren).. is ein ziemlich ausführliches, hilfreiches Buch, gibts aber glaub ich nur auf Englisch. Für Java2D-API (die Grafik-Sachen) gibts das Buch Java2D Api-Graphics von Vincent J. Hardy (auch empfehlenswert, aber englisch)
-
alles klar! vielen dank an euch beide. ihr habt mir ja schon ziemlich weitergeholfen...:)
mfg
tom