AWT mehrere Bilder in einen Frame zeichnen + Layout Manager

Furtano

Mitglied
Hallo,

ich möchte mehrere Bilder und Histogramme in einen Frame zeichnen und diese sollen alle dem LayoutManager (GridBagLayout) übergeordnet sein. Es soll dann proportional skaliert werden und gibt noch einige Besonderheiten.

Wie mach ich das am Besten? Jedes Bild nen eigenes Panel, die Panels den Layout zuweisen und dann das Panel zeichnen?
Ich möchte nur AWT und nicht SWING benutzen.
Java:
package htw;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Fenster extends Frame {
	
	public Fenster(String pfad) {
		this.pfad = pfad;
	}
		
	private String pfad;
	
	// This method returns an Image object from a buffered image
	public static Image toImage(BufferedImage bufferedImage) {
	    return Toolkit.getDefaultToolkit().createImage(bufferedImage.getSource());
	}
	
	public void update(Graphics g) { //Example2409.java
		   paint(g);
		}
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		
		
		Color linie = new Color (255,0,255);
		Image foto2 = null;
		g.setColor(linie);
		Dimension windowSize = this.getSize();
		int heigth = (int) windowSize.getHeight();
		int width = (int) windowSize.getWidth();
		BufferedImage foto = null;
		
		try {
			foto = BufferImage.drawthePicture(pfad);
			
			foto2 = toImage(foto);
			// Skaliert das Bild auf best. Maße, 2 = FAST_SCALING
			foto2 = foto2.getScaledInstance(width, heigth , 2);
			

			g.drawImage(foto2, 0, getheigthTitlebar(), this);
			
			// Groesse des aktuellen Fensters
			
			g.drawString(String.valueOf(windowSize.getHeight()), 100, 100);
			//g.drawLine(0, getheigthTitlebar(), 400, 200);
			
			
		} 
		
		catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}
	
	// Gibt die Hoehe der Titlebar wieder, um korrekt zu zeichnen
	public int getheigthTitlebar (){
		return this.getInsets().top;
	}
	
}
 

Michael...

Top Contributor
Grundsätzlich würde ich die paint eines Frames nicht überschreiben. Besser ein Panel in den Frame packen und dessen paint überschreiben.
Wie mach ich das am Besten? Jedes Bild nen eigenes Panel, die Panels den Layout zuweisen und dann das Panel zeichnen?
Panel kann nichts mit Bildern anfangen, nimm eine Label und weise das Bild als Icon zu.
Ich möchte nur AWT und nicht SWING benutzen.
Warum?
 

GUI-Programmer

Top Contributor
Panel kann nichts mit Bildern anfangen, nimm eine Label und weise das Bild als Icon zu.
Eher nicht. Nehm lieber für jedes Bild nen Canvas und füge diese dann den Frame mit GBL hinzu, da das Vergrößern von Bildern in Labels nicht besonders gut ist ( Performance & Qualität).
 

L-ectron-X

Gesperrter Benutzer
Panel kann nichts mit Bildern anfangen...

Man kann doch aber ein Panel schreiben, was Bilder zeichnen kann.
Beispiel:
Java:
import java.awt.*;

public class ImagePanel extends Panel {
   private Image image;

   /**
    * Erzeugt ein neues, leeres ImagePanel, mit der Fähigkeit, nach Übergabe eines
    * Image-Objektes ein Bild zu zeichnen.
    */
   public ImagePanel() {
      super();
   }
   
   /**
    * Erzeugt ein neues ImagePanel, welches als Argument ein Image-Objekt
    * zur Darstellung erwartet.
    * @param image das Image-Objekt, welches vom ImagePanel dargestellt werden soll.
    */
   public ImagePanel(Image image) {
      this();
      this.image = image;
   }
   
   /**
    * Setzt per Übergabe eines Image-Objektes ein Bild in dieses Panel.
    * @image das Bild, welches vom Panel dargestellt werden soll.
    */
   public void setImage(Image image) {
      this.image = image;
      repaint();
   }
   
   public void paint(Graphics g) {
      super.paint(g);
      if(image != null) {
         g.drawImage(image, 0, 0, this);
      }
   }
}
 

Furtano

Mitglied
Oh danke habe ich beherzigt und es funktioniert soweit.
Einziges Problem: die gezeichnete rote Linie flackert wie verrückt, das jedoch Bild nicht o_O

Java:
package htw;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.IOException;

/*
 * Zeichnet ein Bild
 * @param pfad der Pfad des zu zeichnenden Bildes 
 * 
 */
public class PicturePanel extends Panel {
	
		private String pfad;
		
		public PicturePanel (String pfad){
			this.pfad = pfad;
		}

		public void update(Graphics g) { //Example2409.java
			   paint(g);
		}
		
        public void paint(Graphics g) {
        	super.paint(g);
        	// Groesse des Fensters
    		//Dimension windowSize = this.getSize();
    		//int heigth = (int) windowSize.getHeight();
    		//int width = (int) windowSize.getWidth();
    		BufferedImage foto = null;
    		Image foto2 = null;
    		
    		try {
    			
    			// Zeichentest - funktioniert das Panel ?
    			g.setColor(Color.RED);	
    			g.drawLine(0, 0, 320, 240);
    			
    			
    			/*
    			 * BILD ZEICHNEN 
    			 */
    			foto = BufferImage.drawthePicture(pfad);
    			foto2 = toImage(foto);
    			// Skaliert das Bild auf best. Maße, 2 = FAST_SCALING
    			//foto2 = foto2.getScaledInstance(width, heigth , 2);
    	
        		g.drawImage(foto2, 0, 0, this);
        		
        		// Groesse des aktuellen Fensters
        		
        		//g.drawString(String.valueOf(windowSize.getHeight()), 100, 100);
        		//g.drawLine(0, getheigthTitlebar(), 400, 200);
        		
               
              
    		} 
    		
    		catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
            this.setSize(320,240);
            
  
        }
        

		// This method returns an Image object from a buffered image
		public static Image toImage(BufferedImage bufferedImage) {
		    return Toolkit.getDefaultToolkit().createImage(bufferedImage.getSource());
		}

}


Java:
package htw;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Label;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.swing.ImageIcon;

public class Fenster extends Frame {
	
	   GridBagLayout gbl = new GridBagLayout();
	   GridBagConstraints gbc = new GridBagConstraints();
	   
   
	
	public Fenster(String pfad) {
		
	     setLayout(gbl);  // GridBagLayout setzen
	     gbc = makegbc(0, 0, 800, 600);
	     gbc.fill = GridBagConstraints.BOTH;
	     
	     PicturePanel bild1 = new PicturePanel(pfad);
	     gbl.setConstraints(bild1, gbc);
	     
	     this.add(bild1);
	     pack();
	}
		

	public void update(Graphics g) { //Example2409.java
		   paint(g);
		}
	@Override
	public void paint(Graphics g) {
		// verhindert das Fackern
		super.paint(g);
//		
//		GridBagLayout gbl=new GridBagLayout();
//		setLayout(gbl);
//		GridBagConstraints gbc=new GridBagConstraints();
		
		Color linie = new Color (255,0,255);
       

	}
	

	// Gibt die Hoehe der Titlebar wieder, um korrekt zu zeichnen
	public int getheigthTitlebar (){
		return this.getInsets().top;
	}
	
	private GridBagConstraints makegbc (int x, int y, int width, int heigth){
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = x;
		gbc.gridy = y;
		gbc.gridwidth = width;
		gbc.gridheight = heigth;
		gbc.insets = new Insets(1,1,1,1);
		return gbc;
		
		
	}
}
 
Zuletzt bearbeitet:
G

Gast2

Gast
Versuch das ganze mal mit Swing umzusetzen, anstatt mit AWT. Swing unterstützt standardmäßig double buffering, evtl. löst das schon dein flackern.
 

GUI-Programmer

Top Contributor
Kenn mich jetzt in AWT nicht so gut aus wie in Swing, würde aber mal die beiden update Methoden, sowie die paint vom Frame entfernen. Ich denke das wird das Flackern schon beheben.
Zudem würde ich die Bilder ganz einfach per
Code:
ImageIO.read(bildURL);
laden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
M Mehrere Bilder auf einmal anzeigen AWT, Swing, JavaFX & SWT 9
V mehrere bilder als eines abspeichern AWT, Swing, JavaFX & SWT 2
T Swing Mehrere Ausgaben in JTextArea AWT, Swing, JavaFX & SWT 2
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
S Mehrere Tabellen Zellen gleichzeitig färben AWT, Swing, JavaFX & SWT 5
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
I Scene Builder - mehrere Seiten AWT, Swing, JavaFX & SWT 6
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
M mehrere jTextField untereinander AWT, Swing, JavaFX & SWT 1
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
M JavaFX JavaFX in mehrere Controller AWT, Swing, JavaFX & SWT 21
R mehrere buttons mit forschleife kreieren und individuell bearbeiten AWT, Swing, JavaFX & SWT 1
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
temi JavaFX Mehrere Views mit Stage.setScene() oder mit Scene.setRoot()? AWT, Swing, JavaFX & SWT 7
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
T Swing Tetraeder - mehrere Punkte verbinden? - Ansätze gesucht AWT, Swing, JavaFX & SWT 2
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 29
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 0
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
J JavaFX - mehrere Views, Model durchreichen AWT, Swing, JavaFX & SWT 10
it_is_all Swing Mehrere JComboBoxen - wie die versch. Boxen mit ItemStateChange auslesen? AWT, Swing, JavaFX & SWT 3
M Swing Mehrere Textfelder mit ScrollBars - Größe der Felder AWT, Swing, JavaFX & SWT 0
W JavaFX Mehrere Klassen in ein TableView AWT, Swing, JavaFX & SWT 6
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
L JavaFX Mehrere JavaFX Szenen mit einem Menü AWT, Swing, JavaFX & SWT 1
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
F JavaFX Mehrere Stages "managen" AWT, Swing, JavaFX & SWT 2
r4w Changelistener auf mehrere Textfelder AWT, Swing, JavaFX & SWT 5
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
S Swing Mehrere Modal-Dialoge übereinander AWT, Swing, JavaFX & SWT 5
T 2D-Grafik JFreeChart mehrere Y-Achsen AWT, Swing, JavaFX & SWT 2
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
Thallius Swing Mehrere tausend "Panels" erstellen AWT, Swing, JavaFX & SWT 3
C Java FX Warnmeldung: Mehrere Fonts gehören derselben Familie und Stil AWT, Swing, JavaFX & SWT 2
J Mehrere JInternalFrame; GetValues AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
K JavaFX Mehrere Cell Editors in einem TreeView Item AWT, Swing, JavaFX & SWT 2
KaffeeFan mehrere JTextField durchlaufen AWT, Swing, JavaFX & SWT 4
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
G JavaFX Menü und mehrere Scenes AWT, Swing, JavaFX & SWT 16
R Swing Mehrere JTextFields mit einem Document Listener AWT, Swing, JavaFX & SWT 2
D Mehrere RadiButtons auswählar AWT, Swing, JavaFX & SWT 3
P Swing JTable mehrere Zeilen markieren AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
T JavaFX FXMLController für mehrere FXML? AWT, Swing, JavaFX & SWT 7
G mehrere Action-Abfolgen erfassen AWT, Swing, JavaFX & SWT 6
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
J Mehrere Hyperlinks "stilvoll" darstellen. AWT, Swing, JavaFX & SWT 1
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
S JavaFX Mehrere TreeTableView's synchron scrollen AWT, Swing, JavaFX & SWT 0
U Mehrere Oberflächeninstanzen seperat schließen AWT, Swing, JavaFX & SWT 5
J Rahmen um mehrere GUI Einzelteile AWT, Swing, JavaFX & SWT 2
S Layouts, mehrere Buttons nebeneinander AWT, Swing, JavaFX & SWT 2
M Mehrere Fenster innerhalb einer Application AWT, Swing, JavaFX & SWT 3
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
M ActionListener für mehrere Klassen AWT, Swing, JavaFX & SWT 4
T [LWJGL] mehrere Displays? AWT, Swing, JavaFX & SWT 19
SexyPenny90 Mehrere Fenster AWT, Swing, JavaFX & SWT 2
M Handling 1 Fenster mehrere Panels AWT, Swing, JavaFX & SWT 2
Y Mehrere JSlider verlinken AWT, Swing, JavaFX & SWT 6
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
O Swing JLabel mehrere Zeilen AWT, Swing, JavaFX & SWT 2
P mehrere Rectangles per JButton AWT, Swing, JavaFX & SWT 9
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
G Mehrere Probleme mit Java's GUI AWT, Swing, JavaFX & SWT 6
G Mehrere Layoutprobleme AWT, Swing, JavaFX & SWT 2
Kenan89 JTable mehrere ListSelections AWT, Swing, JavaFX & SWT 2
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
A mehrere Zeilen in GUi ausgeben AWT, Swing, JavaFX & SWT 2
N Mehrere Tasks nacheinander ausführen AWT, Swing, JavaFX & SWT 7
propra Mehrere Objekte gleichzeitig verschieben AWT, Swing, JavaFX & SWT 7
M 2D-Grafik Mehrere Linien (nacheinander) übereinander Zeichnen AWT, Swing, JavaFX & SWT 6
M Mehrere JPanel nacheinander?! AWT, Swing, JavaFX & SWT 11
K SWT Mehrere Einträge ins Clipboard legen AWT, Swing, JavaFX & SWT 2
C Swing Ein JFrame mehrere Ansichten AWT, Swing, JavaFX & SWT 8
C Swing Mehrere JSlider sollen aufeinander reagieren AWT, Swing, JavaFX & SWT 4
GUI-Programmer JFilechooser, mehrere Datein selektieren und Reihenfolge (2) AWT, Swing, JavaFX & SWT 8
S Mehrere JLists - Wie kennzeichnen? AWT, Swing, JavaFX & SWT 2
S Swing MVC Ein JFrame, mehrere JPanels AWT, Swing, JavaFX & SWT 6
J Mehrere JRadioButtons, aber nur 1 darf ausgewählt sein AWT, Swing, JavaFX & SWT 4
L Swing Mehrere Button die selbe Größe AWT, Swing, JavaFX & SWT 4
B AWT mehrere Fenster schließen AWT, Swing, JavaFX & SWT 8
I Wie mehrere JComboBoxen in Abhängigkeit einer anderen Box ändern? AWT, Swing, JavaFX & SWT 8
G mehrere JPanel in ein (vertikales) JScrollPane AWT, Swing, JavaFX & SWT 8
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
GianaSisters Swing jTable - Feldtext soll mehrere Zeilen haben AWT, Swing, JavaFX & SWT 3
K JFileChooser mehrere Dateien markieren ohne STRG AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben