Border verschwindet durch Graphics.drawImage()

lyrichter

Mitglied
Hallo liebes Java-Forum!

Ich beschäftige mich nun seit einigen Tagen mit der Erstellung von GUI's in Java mit Swing und bin nun auf folgendes Phänomen gestoßen, das ich mir nicht ganz erklären kann:

Wenn ich in einem JPanel paintComponent() überschreibe und darin die drawImage()-Methode eines Graphics-Objektes aufrufe, wird die Border des Panels nicht mehr angezeigt.

Ich habe daraufhin gelesen, dass die Border-Linien nicht außerhalb des Zeichenbereichs, sondern noch im Zeichenbereich selbst erstellt werden - vielleicht kommt es da dann ja zu Überlappungen von gezeichnetem Inhalt und der Rahmenlinie. Da ich aber ebenfalls gelesen habe, dass durch einen Aufruf von paint() zuerst paintComponent() und dann paintBorder() aufgerufen wird, dachte ich, dass der Rahmen eher den Inhalt überdeckt als umgekehrt. Nun habe ich trotzdem mal den Zielbereich von drawImage stark verkleinert, allerdings ohne Erfolg. Das Bild befindet sich wie erwartet ganz klein in der Mitte des vorgesehen Bereiches - die Rahmenlinie fehlt aber trotzdem.
Um das Problem der Überlappung 100%ig zu umgehen, habe ich das Draw-Panel zusätzlich noch in ein weiteres, deutlich größeres JPanel gepackt. Ohne den Aufruf von drawImage() sind beide Borderlines sichtbar und wie erwartet mit einem gewissen Abstand geschachtelt, mit dem Aufruf hingegen verschwinden beide Linien.

So, das war der ausführliche Bericht meienr Ansätze und Gedanken, nachfolgend poste ich den zugehörigen Code. Um Ratschläge und Anregungen wäre ich sehr dankbar!

Java:
public class MyPanel extends JPanel{
	BufferedImage buffImg;
	Point upperLeft;
	int width;
	int height;
	
	public MyPanel(){
		super();
		
		//load Image
		File f = new File("images/test.jpg");
		try {
			buffImg = ImageIO.read(f);
		} catch (IOException e) {
			System.out.println("Datei konnte nicht geöffnet werden!");
		}
		
		// initial values
		upperLeft = new Point(0,0);
		width = buffImg.getWidth();
		height = buffImg.getHeight();
		
		repaint();
	}
	
	@Override
	protected void paintComponent( Graphics g )
	  {
		super.paintComponent(g);
		
		int a = (int) upperLeft.getX();
		int b = (int) upperLeft.getY();
		int c = a+width;
		int d = b+height;
				
		Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g2.drawImage(buffImg,200,200,300,300,a,b,c,d, null);
        g2.dispose();
        }
}



public class Test {
	
	public static void main(String[] args){
		// frame
		JFrame frame = new JFrame("test");
		frame.setSize(1000, 1000);
	    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	    frame.setLayout( new FlowLayout() );
	    
	    //picPanel
		MyPanel picPanel = new MyPanel();
		picPanel.setPreferredSize(new Dimension(400,400));
		picPanel.setBorder(BorderFactory.createTitledBorder("picPanel"));
		
		//picBorderPanel
		MyPanel picBorderPanel = new MyPanel();
		picBorderPanel.setPreferredSize(new Dimension(500,500));
		picBorderPanel.setBorder(BorderFactory.createTitledBorder("picBorderPanel"));
		picBorderPanel.add(picPanel);
		
		//buttonPanel
		JPanel buttonPanel = new JPanel();
		buttonPanel.setPreferredSize(new Dimension(500,500));
		buttonPanel.setBorder(BorderFactory.createTitledBorder("buttonPanel"));
		
		// adding components to top level container
		Container contentPane = frame.getContentPane();
		contentPane.add(picBorderPanel);
		contentPane.add(buttonPanel);
		
		// set visible
		frame.pack();
		frame.setVisible(true);	
	}

}
 

Fab1

Top Contributor
Hi,

versuch mal
Java:
g2.drawImage(buffImg,200,200,300,300,a,b,c,d, this);
dies hatte in vergangener Zeit bei jemand anderen auch zu Problemen geführt. Das war es aber auch schon mit meinem Wissen zum Zeichnen ;)
 

bERt0r

Top Contributor
Ganz einfach: Du rufst g2.dispose() in deiner Paint Methode auf und löscht daher dein übergebenes Graphikobjekt. Mit diesem Objekt sollen aber dann noch der Border gezeichnet werden. Du darfst nur Graphics Objekte dipsosen, wenn du sie dir selbst mit createGraphics erstellt hast. Nur weil du es auf ein Graphics2D castest ist es noch immer das gleiche Objekt.
PS: Es ist übrigens einfacher ein Bild mit drawImage(image, xPunkt, yPunkt, breite, höhe, null) zu Zeichnen.
 
Zuletzt bearbeitet:

lyrichter

Mitglied
Vielen Dank bERt0r, damit klappt es wunderbar!

Mir war bis jetzt gar nicht bewusst, dass dieses Graphics-Objekt danach noch genutzt wird.

Viele Grüße,
lyrichter
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K JavaFX CSS Border (Verschiebung verhindern) AWT, Swing, JavaFX & SWT 4
MiMa GUI Controller für Border Pane als MVC Modell AWT, Swing, JavaFX & SWT 1
MaxG. JavaFX JavaFX Border zuweisen AWT, Swing, JavaFX & SWT 8
G Border der Komponente bei Table CellRenderer überschreiben AWT, Swing, JavaFX & SWT 0
S Rectangle Border Color AWT, Swing, JavaFX & SWT 13
J JFrame border AWT, Swing, JavaFX & SWT 2
V Swing JButton ohne Border bei Anklicken AWT, Swing, JavaFX & SWT 3
C Border in JPanel erstellen AWT, Swing, JavaFX & SWT 4
eskimo328 Dashed Border in JRE 7 funktioniert nicht AWT, Swing, JavaFX & SWT 3
Kenan89 Border nimmt Platz AWT, Swing, JavaFX & SWT 17
B Border anzeigen/nicht anzeigen AWT, Swing, JavaFX & SWT 6
G Swing JTabbedPane Was für ein Border wird da um die Tabs gezeichnet? AWT, Swing, JavaFX & SWT 6
G Etched Border nur an einer Seite einfügen AWT, Swing, JavaFX & SWT 16
P Swing Größe eines JPanels bestimmen (ohne Border!) AWT, Swing, JavaFX & SWT 2
F Swing UI Problem mit Zeichnen der Tab-Border AWT, Swing, JavaFX & SWT 2
N JButton Border(null) AWT, Swing, JavaFX & SWT 3
A SWT - group - border color? AWT, Swing, JavaFX & SWT 4
S Border von JTabbedpane-Tab? AWT, Swing, JavaFX & SWT 3
K SWT Titeld Border AWT, Swing, JavaFX & SWT 3
H JList: Selection-Border entfernen AWT, Swing, JavaFX & SWT 2
Streeber Menüpunkt - Border/Strich AWT, Swing, JavaFX & SWT 2
A Titled Border nur oben? AWT, Swing, JavaFX & SWT 3
A Eigene Border für Buttons AWT, Swing, JavaFX & SWT 19
T Font mit Border AWT, Swing, JavaFX & SWT 7
T Border eines Panels nicht an der rechten Kante anzeigen AWT, Swing, JavaFX & SWT 7
T paintComponent() überschreiben: Platz für Border freihalten? AWT, Swing, JavaFX & SWT 6
C menubar border AWT, Swing, JavaFX & SWT 2
X Einzelne Border setzen AWT, Swing, JavaFX & SWT 2
J Border bei JSplitPane entfernen? AWT, Swing, JavaFX & SWT 2
K Border von JTextField AWT, Swing, JavaFX & SWT 1
M JWindow mit Rahmen(border) ausstatten AWT, Swing, JavaFX & SWT 4
G JPanel und Border AWT, Swing, JavaFX & SWT 16
C SWT Composite Border im Nachhinein setzen AWT, Swing, JavaFX & SWT 1
M Border in ToolTip AWT, Swing, JavaFX & SWT 5
E JButton und Border AWT, Swing, JavaFX & SWT 6
J Border im Header bei JTable verändern AWT, Swing, JavaFX & SWT 3
Z Border um ein JPanel AWT, Swing, JavaFX & SWT 3
W Probleme mit Border- und null-Layout AWT, Swing, JavaFX & SWT 8
DonBronson Gezeichnetes Objekt verschwindet nachdem erneut gezeichnet wird AWT, Swing, JavaFX & SWT 8
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
E Button verschwindet nachdem ein Rechteck gezeichnet wurde AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
E Swing Text verschwindet AWT, Swing, JavaFX & SWT 1
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
javampir Java FX Text verschwindet nicht AWT, Swing, JavaFX & SWT 9
A Swing Koordinatensystem wird gezeichnet verschwindet aber und die Einteilungen bleiben nicht bestehen AWT, Swing, JavaFX & SWT 5
R TriangleMesh verschwindet teilweise beim resizen des Frames, sowie beim rotieren? AWT, Swing, JavaFX & SWT 1
T AWT JTextfield verschwindet AWT, Swing, JavaFX & SWT 10
S LayoutManager TextField verschwindet / wird klein AWT, Swing, JavaFX & SWT 4
D Swing JOptionPane verschwindet beim 2. Aufruf einfach so?? AWT, Swing, JavaFX & SWT 2
J JPanel verschwindet... AWT, Swing, JavaFX & SWT 8
frankred Swing JMenu verschwindet nicht beim klicken ausserhalb des JMenu! AWT, Swing, JavaFX & SWT 4
P Swing Jtable mit Delete Button (Button verschwindet nicht bei Delete)) AWT, Swing, JavaFX & SWT 5
G Menü verschwindet durch .setText() AWT, Swing, JavaFX & SWT 4
J JTextArea verschwindet bei resize vom JFrame AWT, Swing, JavaFX & SWT 2
N JMenuBar verschwindet nicht nach ComponentEvent AWT, Swing, JavaFX & SWT 6
K 2D-Grafik Linie verschwindet beim Zeichnen AWT, Swing, JavaFX & SWT 10
S JCheckBoxMenuItem - Haekchen verschwindet bei Icon AWT, Swing, JavaFX & SWT 3
S Beim Painten auf JPanel verschwindet das Bild :( AWT, Swing, JavaFX & SWT 10
Iron Monkey SwingWorker verschwindet nicht AWT, Swing, JavaFX & SWT 10
O JPanel Zeichnung verschwindet AWT, Swing, JavaFX & SWT 4
F Zeichnung verschwindet bei Nutzung von einem Layout AWT, Swing, JavaFX & SWT 6
R JTable Headerbeschriftung verschwindet AWT, Swing, JavaFX & SWT 3
Dit_ Zeilenmarkierung verschwindet nach repaint() AWT, Swing, JavaFX & SWT 12
R Panel verschwindet AWT, Swing, JavaFX & SWT 2
P JTextArea text verschwindet bei mausklick AWT, Swing, JavaFX & SWT 5
R Bei JDialog verschwindet der Inhalt aus übergeordneten Frame AWT, Swing, JavaFX & SWT 2
X Durch DrawLine verschwindet das Fenster und die Objekte AWT, Swing, JavaFX & SWT 13
G Zeichnung verschwindet nach verändern der Fenstergröße. AWT, Swing, JavaFX & SWT 2
N WindowsLookAndFeel>JFrame/JDialogTitelleiste verschwindet AWT, Swing, JavaFX & SWT 4
K Zeichnung verschwindet. AWT, Swing, JavaFX & SWT 21
A gezeichnete Linie verschwindet, wenn ich JMenuBar öffne AWT, Swing, JavaFX & SWT 2
C Menue verschwindet hinter AWT-List Box.wie beheben? AWT, Swing, JavaFX & SWT 3
M JMenu verschwindet unter ScrollPane AWT, Swing, JavaFX & SWT 3
G wie verschwindet Konsole? AWT, Swing, JavaFX & SWT 3
V JDialog "verschwindet" beim umschalten in der Task AWT, Swing, JavaFX & SWT 9
R JFrame verschwindet sofort hiner dem Hauptframe AWT, Swing, JavaFX & SWT 9
M Menüleiste verschwindet AWT, Swing, JavaFX & SWT 6
H Hintergrundbild im Panel verschwindet sofort AWT, Swing, JavaFX & SWT 6
I Swing: Menü verschwindet beim Einfügen eines Bildes AWT, Swing, JavaFX & SWT 15
D DropDownSelection Box verschwindet hinter JTextArea AWT, Swing, JavaFX & SWT 2
Z bei kleinen Buttons verschwindet Schrift, obwohl Platz wäre AWT, Swing, JavaFX & SWT 5
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
N JavaFX Vor beenden der Anwendung durch klicken von X Dialog zeigen AWT, Swing, JavaFX & SWT 1
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
pkm MainFrame durch Actionlistener auffrischen, aber wie? AWT, Swing, JavaFX & SWT 2
J Java Datei durch CMD mit Parameter ausführen AWT, Swing, JavaFX & SWT 1
A Panelwechsel durch RadioButtons AWT, Swing, JavaFX & SWT 1
J Falsches Rendern durch JCheckBox in eigenem JTree AWT, Swing, JavaFX & SWT 6
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
Monokuma 2D-Grafik Imageimport durch eine gezeichnete Form ersetzen AWT, Swing, JavaFX & SWT 16
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
L JavaFX JavaFX stürtzt durch einen Server#connect Exception AWT, Swing, JavaFX & SWT 3
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
S JavaFX Tab durch Enter ersetzten AWT, Swing, JavaFX & SWT 3
M Swing Durch Usereingabe neues Objekt AWT, Swing, JavaFX & SWT 2
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben