Grafiken in einem Panel anzeigen lassen

haggard

Grünschnabel
Hallo!

Wie man sicher aus dem Betreff entnehmen kann, vesuche ich in JAVA eine Grafik anzeigen zu lassen. Dies ist mir jedoch bisher noch nicht gelungen. Vielleicht weiß von Ihnen jemand Rat, wie man Grafiken einbindet und anzeigen läßt.

Als Entwicklungsumgebung dient mir hierbei der Borland JBuilder 9. Aber eins nach dem anderen...

Folgendes soll bei diesem Projekt umgesetzt werden:

Ich habe in Jbuilder eine Benutzeroberfläche designed. Aus einem Pulldown-Menü soll einen Gegenstand ausgewählt werden, z.B. ein Rohr. Dieses Rohr soll dann in einem kleinen Vorschaufenster als Grafik angezeigt werden. Sobald man dann die Koordinaten ausgewählt hat, z.B. A3, und den Ok Button betätigt, dann wird die Grafik an die entsprechende Stelle, auf der rechten Seite abgelegt. Das Feld auf der rechten Seite ist wie ein Schachbrett aufgebaut, also waagerecht mit Buchstaben in aufsteigender Reihenfolge und in vertikaler Richtung mit Zahlen gekennzeichnet.

design.jpg


Die verschiedenen Grafiken liegen im JPG-Format (100x100 Pixel) vor.

rohr_links.jpg


Meine letze Java Programmierung liegt Jahre zurück und mit Grafiken habe ich auch noch nie gearbeitet. Ich würde Sie daher gerne um Rat fragen.

Mit freundlichen Grüßen
Stefan

P.S.: Am wichtigsten wäre mir aber auch erst einmal Überhaupt eine Grafik anzeigen zu lassen! Vielen Dank im voraus!
 
Zuletzt bearbeitet:
Hallo!

Siehe Besipiel:

Code:
/*
 * PaintFrame.java
 *
 * Created on 11. März 2004, 09:14
 */
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 *
 * @author  Darimont
 */
public class PaintFrame extends javax.swing.JFrame {

	private Image image;
	private MediaTracker mt;
	private JPanel basePanel;
	private JComboBox cboXPos;
	private JComboBox cboYPos;
	private JLabel lblXPos;
	private JLabel lblYPos;
	private JPanel menuPanel;
	private DefaultComboBoxModel dcbmX, dcbmY;
	private MyPaintPanel paintPanel;

	/** Creates new form PaintFrame */
	public PaintFrame() {
		initComponents();
		loadImage();
	}

	/**
	 * 
	 */
	private void loadImage() {
		// TODO Auto-generated method stub
		mt = new MediaTracker(this);
		try {
			image = ImageIO.read(new File("c:/rohr_links.jpg"));
			mt.addImage(image, 0);
			mt.waitForAll();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	private void initComponents() {
		GridBagConstraints gridBagConstraints;
		basePanel = new JPanel();
		menuPanel = new JPanel();
		lblXPos = new JLabel();
		dcbmX =
			new DefaultComboBoxModel(
				new Object[] {
					new Integer(1),
					new Integer(2),
					new Integer(3),
					new Integer(4)});
		cboXPos = new JComboBox(dcbmX);
		lblYPos = new JLabel();
		dcbmY =
			new DefaultComboBoxModel(
				new Object[] {
					new Integer(1),
					new Integer(2),
					new Integer(3),
					new Integer(4)});
		cboYPos = new JComboBox(dcbmY);
		paintPanel = new MyPaintPanel();

		cboXPos.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				doPaintPicture();
			}

		});

		cboYPos.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				doPaintPicture();
			}
		});

		getContentPane().setLayout(new FlowLayout());

		setTitle("PaintTest");
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent evt) {
				exitForm(evt);
			}
		});

		basePanel.setLayout(new GridBagLayout());

		basePanel.setBackground(new Color(102, 153, 255));
		basePanel.setMinimumSize(new Dimension(500, 400));
		basePanel.setPreferredSize(new Dimension(500, 400));
		menuPanel.setLayout(new GridBagLayout());

		menuPanel.setBackground(new Color(255, 153, 51));
		menuPanel.setMinimumSize(new Dimension(100, 400));
		menuPanel.setPreferredSize(new Dimension(100, 400));
		lblXPos.setText("X: ");
		menuPanel.add(lblXPos, new GridBagConstraints());

		menuPanel.add(cboXPos, new GridBagConstraints());

		lblYPos.setText("Y: ");
		gridBagConstraints = new GridBagConstraints();
		gridBagConstraints.gridx = 0;
		gridBagConstraints.gridy = 1;
		menuPanel.add(lblYPos, gridBagConstraints);

		gridBagConstraints = new java.awt.GridBagConstraints();
		gridBagConstraints.gridx = 1;
		gridBagConstraints.gridy = 1;
		menuPanel.add(cboYPos, gridBagConstraints);

		basePanel.add(menuPanel, new GridBagConstraints());

		paintPanel.setBackground(new Color(255, 51, 51));
		paintPanel.setMinimumSize(new Dimension(400, 400));
		paintPanel.setPreferredSize(new Dimension(400, 400));
		basePanel.add(paintPanel, new GridBagConstraints());

		getContentPane().add(basePanel);

		pack();
	}

	/** Exit the Application */
	private void exitForm(WindowEvent evt) {
		System.exit(0);
	}

	/**
	 * @param args the command line arguments
	 */
	public static void main(String args[]) {
		new PaintFrame().show();
	}

	private void doPaintPicture() {
		int x = ((Integer) cboXPos.getSelectedItem()).intValue();
		int y = ((Integer) cboYPos.getSelectedItem()).intValue();

		paintPanel.setImgX(x);
		paintPanel.setImgY(y);
		paintPanel.repaint();
	}

	class MyPaintPanel extends JPanel {

		int anzKachelnX = 4;
		int anzKachelnY = 4;
		int widthKachel = 100;
		int heightKachel = 100;
		boolean colorSwitch = true;

		private int imgX;
		private int imgY;

		public MyPaintPanel() {
			super();
		}

		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			//Gitterzeichnen
			for (int x = 0;
				x <= (anzKachelnX - 1) * widthKachel;
				x += widthKachel) {
				for (int y = 0;
					y <= (anzKachelnY - 1) * heightKachel;
					y += heightKachel) {
					if (colorSwitch) {
						g.setColor(Color.BLUE);
					} else {
						g.setColor(Color.GREEN);
					}
					colorSwitch = !colorSwitch;
					g.fillRect(x, y, widthKachel, heightKachel);
				}
				colorSwitch = !colorSwitch;
			}
			paintPicture(g, image, imgX, imgY);

		}

		public void paintPicture(
			Graphics g,
			Image picture,
			int kachelX,
			int kachelY) {

			if (picture == null)
				return;
			g.drawImage(
				picture,
				(kachelX - 1) * widthKachel,
				(kachelY - 1) * heightKachel,
				this);
		}

		/**
		 * @return
		 */
		public int getImgX() {
			return imgX;
		}

		/**
		 * @return
		 */
		public int getImgY() {
			return imgY;
		}

		/**
		 * @param i
		 */
		public void setImgX(int i) {
			imgX = i;
		}

		/**
		 * @param i
		 */
		public void setImgY(int i) {
			imgY = i;
		}

	}

}

Gruß Tom
 

Anhänge

  • bild4.png
    bild4.png
    9 KB · Aufrufe: 695
Hab das ganze jetzt mal Ausprobieren können. Ich habe nur um mal zu sehen wie das ganze Funktioniert, den o.g. Quellcode benutzt. Ich bekomm da irgendwie noch ne Fehlermeldung, welche besagt, daß die Klasse public sei und ich in der PaintFrame noch irgendwas deklarieren soll.

Bitte entschuldige meine Unwissenheit, aber mit Grafikprogrammierung, Borland und überhaupt so komplizierten Strukturen habe ich bisher nicht viel am Hut gehabt.

mfg
stefan
 
Entschuldige das ich mich erst so spät melde. Aber ich hatte echt viel zu tun. So, das Problem ist wohl das ich in JBuilder nicht einfach eine *.java Datei einfügen kann und diese dann Ausführen kann.

Ich habe deshalb auch mal ein anderes Programm ausprobiert, welches das zumindest tut. Eclipse heißt das und hat mir auch alles angezeigt so wie es sollte.

Das Problem ist jetzt nur noch, das ich mehrere Bilder habe und diese in ein Vorschaufenster bei Auswahl anzeigen will. Dann, bei betätigen des Ok Buttons werden die Bilder in das "Schachfeld" einsortiert. Aber daran arbeite ich gerade.

Kann aber sein, daß ich dich bald nochmal nerven muß, da ich wahrscheinlich noch ein Problem habe, aber das wird wohl ein neuer Thread.

Vielen Dank jedenfalls

Stefan
 
Kennt sich jemand mit JPanel und ImageIcons aus?

Hallo mal wieder!

Ich habe ein dickes Problem. Ich komme nicht weiter! Ich habe schon alles mögliche ausprobiert und versucht, aber es will nicht funktionieren.

Ich hatte unter anderem in einem anderen Thread auch schon um Hilfe gebeten und auch freundlicherweise viele Lösungsansätze bekommen.

Leider will es immernoch nicht funktionieren. Also, ich habe hier das fast vollendete Programm. Bis auf eine Methode funktioniert auch alles. Die Methode die mir Kopfzerbrechen bereitet heißt "allesmalen()". Ich hatte vor, sie ähnlich der firstpaint Methode zu realisieren. Aber leider klappt das nicht. In der Konsolenausgabe wird alles wunderbar angezeigt. Nur die grafische Ansicht verändert sich nicht, sprich es wird beim drücken des Ok buttons, die ausgewählte Grafik nicht in das Raster eingefügt bzw. mit der vorherigen Grafik ausgetauscht.

Mein Kumpel (der auch einiges mitprogrammiert hat) und ich kennen uns nun auch nicht so gut mit JPanel's und ImageIcons aus. Daher, wenn jemand einen einfacheren Weg weiß, würden wir das auch sehr begrüßen. Aber an sich würde ich gern wissen wie man die in der Vorschau angezeigte Grafik im "Schachfeld" anzeigen lässt.

An Thomas Darimont... Ich hatte von dir den Lösungsansatz mit dom4-j für die XML Umwandlung bekommen (Danke nochmal dafür). Das hat mich auf die Spur von JDOM gebracht, aber man brauch dennoch eine extra jar Datei, aber keine zusätzlichen java Dateien.

Ich hoffe ihr könnt mir helfen! Ich bin langsam am verzweifeln, vor allem weil ich durch meine neue Arbeit immer weniger Zeit finde, das Programm fertig zu machen.

Hier nun der Quelltext (da ich mal wieder die Länge des Beitrages überschreiten würde, kann ich den Quelltext leider wieder nur als Download bereitstellen:

Quelltext -> editor.java

Vielen Dank im voraus
Haggard
 
Zurück