Erzeugen eines leeren Graphics-Objektes

danoman

Mitglied
Hallo zusammen.
gibt es die Möglichkeit ein Graphics-Objekt zu erzeugen, welches leer ist? Welches zb. beim Aufruf einer überschriebenen paint-Methode nichts zeichnen würde?

Gruß
Daniel
 
S

SlaterB

Gast
ja









edit:
also du könntest z.B. eine eigene Klasse bauen, die das Interface implementiert,
alle Methoden einbauen, die dann entweder gar nix machen oder allein die Aufrufe loggen,
was ziemlich interessant ist wenn man das Graphics-Objekt an eine ansonsten im Quellcode unbekannte paint-Methode übergibt
 
Zuletzt bearbeitet von einem Moderator:

danoman

Mitglied
hab ich schon versucht... gibt nullpointer exceptions in der JComponent klasse.

Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at javax.swing.JComponent.paint(JComponent.java:1045)
        at emptygraphicstest.Main$1.paint(Main.java:53)
        at javax.swing.JComponent.paintChildren(JComponent.java:866)
        at javax.swing.JComponent.paint(JComponent.java:1038)
        at javax.swing.JComponent.paintChildren(JComponent.java:866)
        at javax.swing.JComponent.paint(JComponent.java:1038)
        at javax.swing.JLayeredPane.paint(JLayeredPane.java:581)
        at javax.swing.JComponent.paintChildren(JComponent.java:866)
        at javax.swing.JComponent.paintToOffscreen(JComponent.java:5145)
        at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:302)
        at javax.swing.RepaintManager.paint(RepaintManager.java:1145)
        at javax.swing.JComponent.paint(JComponent.java:1015)
        at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
        at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78)
        at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115)
        at java.awt.Container.paint(Container.java:1844)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:751)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:696)
        at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:676)
        at javax.swing.RepaintManager.access$700(RepaintManager.java:57)
        at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1550)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:602)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at javax.swing.JComponent.paint(JComponent.java:1045)
        at emptygraphicstest.Main$1.paint(Main.java:53)
        at javax.swing.JComponent.paintToOffscreen(JComponent.java:5138)
        at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:302)
        at javax.swing.RepaintManager.paint(RepaintManager.java:1145)
        at javax.swing.JComponent._paintImmediately(JComponent.java:5086)
        at javax.swing.JComponent.paintImmediately(JComponent.java:4896)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:740)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:696)
        at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:676)
        at javax.swing.RepaintManager.access$700(RepaintManager.java:57)
        at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1550)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:602)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

den Paint-Event habe ich mit diesem Graphics-Objekt versucht:

Java:
package emptygraphicstest;

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.PathIterator;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.ImageObserver;
import java.text.AttributedCharacterIterator;
import javax.swing.DebugGraphics;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author dan
 */
public class EmptyGraphics extends Graphics {

    @Override
    public Graphics create() {
        return null;                               // hab hier auch versucht ein new DebugGraphics() zu returnen, bzw dieses 
                                                      // direkt zu instanziieren (in dem paintevent) - Exceptions treten dann in der 
                                                      //DebugGraphics-Klasse auf
    }

    @Override
    public void translate(int x, int y) {
    }

    @Override
    public Color getColor() {
        return Color.black;
    }

    @Override
    public void setColor(Color c) {
    }

    @Override
    public void setPaintMode() {
    }

    @Override
    public void setXORMode(Color c1) {
    }

    @Override
    public Font getFont() {
        return new Font("Arial", Font.PLAIN, 10);
    }

    @Override
    public void setFont(Font font) {
    }

    @Override
    public FontMetrics getFontMetrics(Font f) {
        return new FontMetrics(new Font("Arial", Font.PLAIN, 10)) {
        };
    }

    @Override
    public Rectangle getClipBounds() {
        return new Rectangle(0, 0, 2, 2);
    }

    @Override
    public void clipRect(int x, int y, int width, int height) {
    }

    @Override
    public void setClip(int x, int y, int width, int height) {
    }

    @Override
    public Shape getClip() {
        return new Rectangle2D.Float(0,0,2,2);
    }

    @Override
    public void setClip(Shape clip) {
    }

    @Override
    public void copyArea(int x, int y, int width, int height, int dx, int dy) {
    }

    @Override
    public void drawLine(int x1, int y1, int x2, int y2) {
    }

    @Override
    public void fillRect(int x, int y, int width, int height) {
    }

    @Override
    public void clearRect(int x, int y, int width, int height) {
    }

    @Override
    public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {
    }

    @Override
    public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {
    }

    @Override
    public void drawOval(int x, int y, int width, int height) {
    }

    @Override
    public void fillOval(int x, int y, int width, int height) {
    }

    @Override
    public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
    }

    @Override
    public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
    }

    @Override
    public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) {
    }

    @Override
    public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) {
    }

    @Override
    public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) {
    }

    @Override
    public void drawString(String str, int x, int y) {
    }

    @Override
    public void drawString(AttributedCharacterIterator iterator, int x, int y) {
    }

    @Override
    public boolean drawImage(Image img, int x, int y, ImageObserver observer) {
        return false;
    }

    @Override
    public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) {
        return false;
    }

    @Override
    public boolean drawImage(Image img, int x, int y, Color bgcolor,
            ImageObserver observer) {
        return false;
    }

    @Override
    public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor,
            ImageObserver observer) {
        return false;
    }

    @Override
    public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) {
        return false;
    }

    @Override
    public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor,
            ImageObserver observer) {
        return false;
    }

    @Override
    public void dispose() {
        
    }
}


Im Grunde genommen möchte ich ein JPanel von seinem Inhalt befreien. Ich möchte sozusagen alles wirklich löschen und nicht mit einem Rectangle übermalen (das ist schwierig weil der hintergrund einen farbverlauf enthält)....

Irgendwelche anderen Ideen?
 
Zuletzt bearbeitet:
T

Tomate_Salat

Gast
wie wäre es mit [c]paintComponent[/c] überschreiben. Du lässt [c]super.paintComponent(g);[/c] weg und zeichnest einfach selbst, was du gerne Zeichnen möchtest.

MFG

Tomate_Salat
 

danoman

Mitglied
hm also im grunde genommen möchte ich einfach den hintergrund bei einem jtextfield entfernen. sodass man nur den text hat ohne dem weißen hintergrund.

darum funktioniert das mit dem überschreiben der paint-methoden nicht so ohne weiteres. es sei denn mir entgeht hier grade was...
 
S

SlaterB

Gast
gerade wenn du NullPointerExceptions bekommst, solltest du genau loggen, was von deinem Graphics aufgerufen wird,
wo vielleicht der Rückgabewert ein Problem sein kann,

dass create() null zurückgibt sieht schon ziemlich schlimm aus,
wieso du da null zurückgibst und was DebugGraphics damit zu tun hat verstehe ich nicht,
der erste naheliegende Versuch wäre bei mir
> return new EmptyGraphics()
oder gleich
> return this;


> Exceptions treten dann in der DebugGraphics-Klasse auf

ja und? dann gehe ihnen dort auf den Grund, kein Grund vorher irgendwo null zurückzugeben ;)
 

Marco13

Top Contributor
Klingt mal wieder nach der Sache mit der Tasse und dem Nagel. Eine Möglichkeit könnte sein, in "create" einfach
return this;
zu schreiben. Besser wäre ... ... .... jede andere Lösung ;) paintComponent überschreiben würde sich anbieten, falls man nicht einfach den Hintergrund der TextFields auf eine transparente Farbe setzen kann...

EDIT: Ach, die letzte Antwort von SlaterB hatte das "return this" ja schon drin :oops:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Erzeugen eines Jar-Files AWT, Swing, JavaFX & SWT 5
L Dynamisches Erzeugen eines Button AWT, Swing, JavaFX & SWT 2
G Grafik erzeugen: eine Art Zustandsgraph eines Automaten AWT, Swing, JavaFX & SWT 7
I TIFF im CMYK-Farbmodell + mit dpi-Auflösung im Header erzeugen - wie? AWT, Swing, JavaFX & SWT 0
Monokuma Blöcke erzeugen (JavaFX) AWT, Swing, JavaFX & SWT 1
B Java FX In control.TreeCell-Implementierung Binding erzeugen AWT, Swing, JavaFX & SWT 0
Q-bert Dynamische Komponente erzeugen AWT, Swing, JavaFX & SWT 6
I Schöne Heatmap erzeugen AWT, Swing, JavaFX & SWT 10
K Color-Objekt erzeugen in CMYK AWT, Swing, JavaFX & SWT 2
MaxG. Swing Dynamisch grafische Objekte erzeugen AWT, Swing, JavaFX & SWT 12
kilopack15 JLabels im Array erzeugen AWT, Swing, JavaFX & SWT 2
J JavaFX Buttons mit Array erzeugen AWT, Swing, JavaFX & SWT 1
B JavaFX Wie Treeview aus xml erzeugen AWT, Swing, JavaFX & SWT 11
S AWT JTextFields durch Array im JMenu erzeugen? AWT, Swing, JavaFX & SWT 19
M In JFreeChart Geraden erzeugen AWT, Swing, JavaFX & SWT 11
D Mit Klick auf Button ein neues Fenster erzeugen AWT, Swing, JavaFX & SWT 11
GreyFox JLabel in laufender Anwendung erzeugen AWT, Swing, JavaFX & SWT 6
K JavaFX Erzeugen dynamischer Layouts in fxml AWT, Swing, JavaFX & SWT 3
A Swing Zwei Klassen mit Textfeld Eingaben vergleichen und Ausgabe erzeugen AWT, Swing, JavaFX & SWT 10
B Knoten, Kanten erzeugen AWT, Swing, JavaFX & SWT 4
H Quadrate dnamisch erzeugen und beliebig füllen AWT, Swing, JavaFX & SWT 7
P TableViewerColumn dynamisch erzeugen AWT, Swing, JavaFX & SWT 3
H Swing Button Klick soll "Untermenü-Buttons" erzeugen AWT, Swing, JavaFX & SWT 2
B Kontrast in einem Bild erzeugen AWT, Swing, JavaFX & SWT 37
J Halb-modales Fenster erzeugen AWT, Swing, JavaFX & SWT 5
A Panels in JavaFX zur Laufzeit erzeugen AWT, Swing, JavaFX & SWT 5
C SWT - widget dynamisch erzeugen und anzeigen AWT, Swing, JavaFX & SWT 10
M jTable - Größe beim Erzeugen AWT, Swing, JavaFX & SWT 4
B eine .jar erzeugen AWT, Swing, JavaFX & SWT 4
K Swing: Panel in Panel erzeugen AWT, Swing, JavaFX & SWT 11
S Bild fläche erzeugen AWT, Swing, JavaFX & SWT 10
G Große dynamische ContextMenus erzeugen (Eclipse RCP) AWT, Swing, JavaFX & SWT 4
A JTree aus Pfaden erzeugen AWT, Swing, JavaFX & SWT 3
T Leerraum im Jframe erzeugen AWT, Swing, JavaFX & SWT 3
E Profilsichten speichern und dynamsich erzeugen?! AWT, Swing, JavaFX & SWT 2
G Mit Java einen Button wie z.B. im Opera 10.63 erzeugen AWT, Swing, JavaFX & SWT 3
R Möglichkeiten ein abgeleitetes Objekt zu erzeugen AWT, Swing, JavaFX & SWT 4
A Swing Dynamisch Objekte erzeugen AWT, Swing, JavaFX & SWT 3
M Jframe wie bekommt man bei den zeile einen header erzeugen AWT, Swing, JavaFX & SWT 2
X Swing Neues Fenster erzeugen AWT, Swing, JavaFX & SWT 3
E AWT RenderedImage aus BufferedImage erzeugen, um Bild abzuspeichern? AWT, Swing, JavaFX & SWT 4
M Swing Zweidimensionales Array mit Farben erzeugen AWT, Swing, JavaFX & SWT 16
H Swing Trennlinie wie bei Menüleiste erzeugen AWT, Swing, JavaFX & SWT 2
Semox Swing JFrame extern erzeugen und in anderes JFrame einbetten AWT, Swing, JavaFX & SWT 7
D Dynamischen JTree aus Hyperlinks bzw. Anker erzeugen AWT, Swing, JavaFX & SWT 8
G ActionEvents selbst erzeugen AWT, Swing, JavaFX & SWT 7
R JLabel und JSlider dynamisch erzeugen? AWT, Swing, JavaFX & SWT 3
O Button (ActionPerformed) soll neues JFrame erzeugen AWT, Swing, JavaFX & SWT 8
I Swing JTree aus ArrayList<File> erzeugen AWT, Swing, JavaFX & SWT 15
data89 Code-completion-window erzeugen - wie? AWT, Swing, JavaFX & SWT 2
J Swing Selbstschliessende Nachrichtenfenster erzeugen AWT, Swing, JavaFX & SWT 8
martinyyyy AWT Parameter erzeugen NullpointerException obwohl sie vorhanden sind? AWT, Swing, JavaFX & SWT 4
B Wie kann ich Greyscale Bilder aus ushort binary files erzeugen? AWT, Swing, JavaFX & SWT 8
multiholle Swing TransferHandler mit DataFlavor erzeugen AWT, Swing, JavaFX & SWT 2
H Swing jpanel in jframe erzeugen und anzeigen AWT, Swing, JavaFX & SWT 5
freakysheep mit jtree config file erzeugen AWT, Swing, JavaFX & SWT 2
E Komponenten in Event Dispatch Thread erzeugen? AWT, Swing, JavaFX & SWT 4
S JTable Daten bearbeiten und Grauwertbild erzeugen! AWT, Swing, JavaFX & SWT 4
S Nachträglich Swing-Elemente in JFrame erzeugen AWT, Swing, JavaFX & SWT 18
isowiz Leeres ImageIcon einer bes timmten Größe erzeugen AWT, Swing, JavaFX & SWT 2
S JMenu und ActionListener per Schleife erzeugen AWT, Swing, JavaFX & SWT 3
M Erzeugen von Komponenten während der Laufzeit AWT, Swing, JavaFX & SWT 6
G Felder dynamisch erzeugen! AWT, Swing, JavaFX & SWT 3
I Textfields dynamisch erzeugen AWT, Swing, JavaFX & SWT 4
J JFrame in Fenstermitte erzeugen AWT, Swing, JavaFX & SWT 16
N Threads kein neues Fenster erzeugen lassen AWT, Swing, JavaFX & SWT 4
A Grafik aus MIME-kodiertem Inhalt erzeugen AWT, Swing, JavaFX & SWT 2
G Datei-Browser - Wie solche Ansicht erzeugen? AWT, Swing, JavaFX & SWT 3
R Nicht rechteckige Komponenten erzeugen? AWT, Swing, JavaFX & SWT 7
vogella Erzeugen der Hauptsicht (JFrame) AWT, Swing, JavaFX & SWT 2
M Aus Swing Oberfläche Bild erzeugen AWT, Swing, JavaFX & SWT 39
M Abstrakte Graphics Klasse erzeugen AWT, Swing, JavaFX & SWT 2
F Komponente dynamisch erzeugen AWT, Swing, JavaFX & SWT 4
J Eigene Fehlermeldung in AWT erzeugen AWT, Swing, JavaFX & SWT 2
J Thread erzeugen AWT, Swing, JavaFX & SWT 9
M dynamischen JTree erzeugen AWT, Swing, JavaFX & SWT 4
S In einem button Panel 2 verschiedene TiteledBoarder erzeugen AWT, Swing, JavaFX & SWT 5
M ImageObserver, Bild dynamisch erzeugen und Speichern AWT, Swing, JavaFX & SWT 24
L Tabelle mit 5 spalten und 2 Zeilen erzeugen AWT, Swing, JavaFX & SWT 4
B Objekt in "actionPerformed" erzeugen und nutzen AWT, Swing, JavaFX & SWT 3
B JFrame aktualisieren ohne es neu zu erzeugen AWT, Swing, JavaFX & SWT 1
G JRadioButton dynamisch erzeugen AWT, Swing, JavaFX & SWT 6
A Zeitversetzes erzeugen von JLabel AWT, Swing, JavaFX & SWT 5
H Textfelder erzeugen AWT, Swing, JavaFX & SWT 2
J Mehrreihige JTabbedPane erzeugen AWT, Swing, JavaFX & SWT 6
G Action Listener erzeugen AWT, Swing, JavaFX & SWT 6
S Mehrere Buttons in einer Schleife erzeugen . AWT, Swing, JavaFX & SWT 3
M Prob. beim dynamischen Erzeugen v. Obj! AWT, Swing, JavaFX & SWT 11
M "einfaches Grafikobjekt erzeugen" AWT, Swing, JavaFX & SWT 8
G Non-Modal JFileChooser erzeugen AWT, Swing, JavaFX & SWT 10
H JComboBoxen dynamisch erzeugen AWT, Swing, JavaFX & SWT 3
M Zusätzlichen Maus-Klick erzeugen AWT, Swing, JavaFX & SWT 4
K toolbar dynamisch erzeugen AWT, Swing, JavaFX & SWT 2
H Statusbar erzeugen AWT, Swing, JavaFX & SWT 2
@ Erzeugen einer Maske zum drucken AWT, Swing, JavaFX & SWT 2
G JTable mit Vektor-Konstruktor erzeugen?! AWT, Swing, JavaFX & SWT 3
S Panel (Frame) erzeugen AWT, Swing, JavaFX & SWT 5
H große mengen an jbuttons dynamisch erzeugen? AWT, Swing, JavaFX & SWT 15
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben