Bilder einladen

Shakal

Mitglied
Hey verehrtes Java-Forum Team,

Ich hab mal weider ein Programmchen was ich machen muss, und zwar versuch ich grad bei Java ein Frame zu erstellen was alles super klappt, leider Scheiter ich daran ein Bild einzuladen und es als Hinter Grund für dieses Frame zu benutzen, Könntet ihr mir dabei Helfen ^^?
 
mir hat mal jemand (ich weiß leider nicht mehr wer) das hier geschrieben, vllt hilft es ja:

Java:
	class BildPanel extends JPanel
	{
		 
		private static final long serialVersionUID = 1L;
		private BufferedImage img;
	    
	    public BildPanel(String dateiName)
	    {
	        
	        try 
	        {
	            img = ImageIO.read(getClass().getResourceAsStream(dateiName));
	        } 
	        
	        catch (IOException e) 
	        {
	            JOptionPane.showMessageDialog(null, dateiName + " wurde nicht gefunden!");
	        }
	        
	        
	        this.setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
	      
	        
	    }
	    
	    public void paintComponent(Graphics g){
	        super.paintComponent(g);
	        g.drawImage(img,0,0,null);
	    }
	    
	}
 
@Mikrowelle Hab ja noch keinen Code weil ich keiner bisschen der Syntax weis wie man etwas einlädt

@KingOfExceptions Ich schau es mir mal an
 
@Mikrowelle Hab ja noch keinen Code weil ich keiner bisschen der Syntax weis wie man etwas einlädt

Ansich würdest du dir sehr viel Zeit ersparen solche Sachen erst mal in der Forensuche oder in Google zu suchen. Das Thema wird wöchentlich behandelt und seither hat sich da auch nichts geändert. Somit wärst du damit sehr viel effizienter unterwegs.
Bei Syntax Problemen fehlt dir nur eins und zwar die Erfahrung und diese lernt man in dem man programmiert und darüber nachdenkt. Sich selbst Gedanken darüber macht und sich nicht die Lösung anschaut.

Hier noch ein Link, dir sicherlich helfen könnte... Grafikdateien laden und anzeigen ? Byte-Welt Wiki
 
Ja okay Entschuldigung ... nächstes mal such ich dann ....

könntet ihr mir dann noch bei einer Sache helfen ? ^^
Ich Möchte Buttons FREI im Layout Platzieren Trotzdem setLocation(x,y) platziert er die alle Hintereinander weg als hätte ich das FlowLayout drin, doch ich habe KEIN layout Definiert und wenn ich setLayout(null) mache seh ich kein Einziges Item
 
Zuletzt bearbeitet:
Im frame die Koordinaten hab ich alle wo die Buttons Hin sollen mit den Layouts krieg ich das nicht hin also wollt ichs frei setzen im frame
 
Ich nehme mal an, du willst deinem Hintergrundbild einen Button hinzufügen?

Ich hatte damals, mal den Fehler gemacht, dass ich dem JFrame den Button hinzugefügt habe, allerdings wäre diese ja nicht sichtbar, da das Bild drüber liegt. Füge die Button (Komponenten) also dem Bild Image oder was du verwendet hast, hinzu dann sollte es funktionieren.

Positionieren kannst du die Komponenten dann auch mit setBounds(int,int,int,int)
 
Na hab ja noch kein bild Drinne nur das Standart JFrame , ich benutz das MVC Entwurfsmuster und im view Add ich halt alles auf ein Bestimmtes Frame
ich hatte es eher so Gedacht

Java:
	private JButton buttonFactory(Controller c, String name, String label,
			Object value,int x,int y) {
		JButton b = new JButton(label);
		b.setName(name);
		c.putValue(name, value);
		b.addActionListener(c);
		return b;
	}

	private JLabel labelFactory(String name) {
		JLabel l = new JLabel(name, JLabel.CENTER);
		l.setFont(new Font("SansSerif", Font.BOLD, 30));
		return l;
	}

	public View(Bierkasten kasten,Bierkasten kasten2,Bierkasten kasten3, Controller c, String art) {
		if (art.equals("kasten")) {

			JButton add = buttonFactory(c, "AddButton", "Kaufen", "add");
			JButton remove = buttonFactory(c, "RemoveButton", "Trinken",
					"remove");
			flasche = Integer.toString(kasten.getZaehler());
			hersteller = kasten.getHerstName();
			flaschenAnahl = labelFactory(flasche);
			herstName = labelFactory(hersteller);
			// setLayout(new GridLayout(0, 2));
			add(herstName);
			add(flaschenAnahl);
			add(add);
			add(remove);
		}
		
		if(art.equals("disco")){
			JLabel besucher = new JLabel("Besucher : ");
			besucher.setFont(new Font("SansSerif", Font.BOLD, 15));
			JButton besPlus = buttonFactory(c,"BesPlus", "Jemanden reinlassen","besPlus",47,123);
			JButton besMinus = buttonFactory(c,"BesMinus", "Jemanden rauswerfen","besMinus",184,123);
			JLabel bitburger = new JLabel("Bitburger : " +kasten.getSize());
			JLabel hasseoreder = new JLabel("Hasseroeder : " +kasten2.getSize());
			JLabel veltins = new JLabel("Veltins : " +kasten3.getSize());
			JButton buttonBurger = buttonFactory(c,"BitBurgerButton", "Bitburger Vorrat","vorratBitburger",406,252);
			JButton buttonRoeder = buttonFactory(c,"HasseroederButton", "Hasseroeder Vorrat","vorratHasseroeder",406,292);
			JButton buttonVeltins = buttonFactory(c,"VetlinsButton", "Veltins Vorrat","vorratVetlins",402,332);
//			setLayout(new GridBagLayout());
			add(besucher);
			add(besPlus);
			add(besMinus);
			add(bitburger);
			add(hasseoreder);
			add(veltins);
			add(buttonBurger);
			add(buttonRoeder);
			add(buttonVeltins);
		}

	}

EDIT 1 Könnte es Sein da ich die größe des Frames erst in der Main bestimme das er dann die Koordinaten der Buttons usw nicht hinkriegt ?
 
Zuletzt bearbeitet:
du fügst überall Komponenten hinzu, bestimmt allerdings nirgendwo die Position und die Größe dieser Komponenten. Wenn du wie von dir oben beschrieben, das Null-Layout verwendest, dann musst du die Größe und Position bestimmen.
Zum Beispiel mit der Methode setBounds(int,int,int,int) welche jede Komponente besitzt.
 
Okay Nächste Frage ...... Wie kann ich es machen, das wenn ich auf einem Button Drücke das sich das Jeweilige Fenster Öffnet

Java:
public class Controller extends AbstractAction implements ActionListener{
	private Bierkasten kasten;

	public Controller(Bierkasten kasten) {
		this.kasten = kasten;
	}
	
	public Controller() {
	}

	public void actionPerformed(ActionEvent e) {
		Object actionObject = e.getSource();
		if (actionObject instanceof JButton) {
			JButton b = (JButton) actionObject;
			String buttonName = b.getName();
			Object buttonValue = this.getValue(buttonName);
			if (buttonValue.equals("remove")) {
				kasten.remove(kasten.getSize() - 1);
			}
			if (buttonValue.equals("add")) {
				kasten.AddFlasche();
			}
			if (buttonValue.equals("vorratBitburger")) {
//				HIER
			}
			if (buttonValue.equals("vorratHasseroeder")) {
				
			}
			if (buttonValue.equals("vorratVetlins")) {
				
			}
			
			
		}

		

	}
	
	

}

Also das sich das Frame Öffnet von dem Jeweiligen Kasten
 
Ich weiß zwar ehrlich gesagt nicht genau, was du da machen möchtest, aber vielleicht muss ich das auch nicht.

Wie vanny schon gesagt hat, ist das Stichwort JButton ActionListener

Wenn du mehrere Buttons besitzt, gibt es 3 Varianten, mit denen zu schauen kannst, welcher Button geklickt wurde.

Direkt beim hinzufügen des ActionListener (addActionListener()😉 mit einer anonymen Klasse arbeiten. Anonyme Klasse

Oder du verwendest Innere Klassen. Also eine Klasse innerhalb einer anderen Klasse, welche das Interface ActionListener implementiert. Innere Klassen

Alternativ kannst du eine kürzere Version verwenden und deine Klasse den ActionListener implementieren lassen, wie du es schon getan hast. Und anschließend schauen, welche Button geklickt wurde, siehe hier: Trigger a click on a Button - Real's Java How-to

ich hoffe du verstehst eine der Methoden.
 
Nein es hat mir daher nicht geholfen da ihr mein Problem nicht verstanden habt ^^

Ich möchte das machen

Java:
	public void actionPerformed(ActionEvent e) {
		Object actionObject = e.getSource();
		if (actionObject instanceof JButton) {
			JButton b = (JButton) actionObject;
			String buttonName = b.getName();
			Object buttonValue = this.getValue(buttonName);
			if (buttonValue.equals("remove")) {
				kasten.remove(kasten.getSize() - 1);
			}
			if (buttonValue.equals("add")) {
				kasten.AddFlasche();
			}
                        // DAS HIER VERSUCHE ICH 
			if (buttonValue.equals("vorratBitburger")) {
				Controller control = new Controller(kasten);
				View view = new View(kasten, control, "kasten");<---- Das Hier meckert er
				kasten.addObserver(view);<---- DAS hier meckert er
				JFrame frame = new JFrame();
				JMenuBar menuBar = new Menubar(control);
				frame.add(view, BorderLayout.CENTER);
				frame.setJMenuBar(menuBar);
				frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
				frame.setBounds(300, 300, 400, 100);
				frame.setLayout(new GridLayout(0, 1));
				frame.pack();
				frame.setVisible(true);
			}
			if (buttonValue.equals("vorratHasseroeder")) {
				test="2";
			}
			if (buttonValue.equals("vorratVetlins")) {
				test="3";
			}

Doch ersagt mir in

Java:
	public View(Bierkasten kasten, Controller c, String art) {
		if (art.equals("kasten")) {

			JButton add = buttonFactory(c, "AddButton", "Kaufen", "add");
			JButton remove = buttonFactory(c, "RemoveButton", "Trinken",
					"remove");
			flasche = Integer.toString(kasten.getSize());<----- Das Hier meckert er
			hersteller = kasten.getHerstName();<----- Das Hier meckert er 
			flaschenAnahl = labelFactory(flasche);
			herstName = labelFactory(hersteller);
			// setLayout(new GridLayout(0, 2));
			add(herstName);
			add(flaschenAnahl);
			add(add);
			add(remove);
		}
	}

wenn ich die weg mache wo "das hier meckert er" steht dann Funktioniert es
 
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at View.<init>(View.java:81)
	at Controller.actionPerformed(Controller.java:34)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
 
Hey habe noch ein Kleines problem bei Bilder Einladen .... ich kann es einladen man sieht es 1A aber es sind keine Buttons oder labels zu sehen


Java:
//MAIN METHODE
public static void window(Bierkasten kasten, Bierkasten kasten2,
			Bierkasten kasten3) {
		Besucher besucher = new Besucher(0);
		Controller control = new Controller(kasten,kasten2,kasten3,besucher);
		View view = new View(kasten, kasten2, kasten3, control, "disco",besucher);
		JFrame club = new JFrame();
		kasten.addObserver(view);
		kasten2.addObserver(view);
		kasten3.addObserver(view);
		besucher.addObserver(view);
		JMenuBar menuBar = new Menubar(control);
		club.add(view, BorderLayout.CENTER);
		club.setJMenuBar(menuBar);
		club.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		club.setBounds(300, 100, 700, 482);
		club.add(new PictureClass("images/Disco-201020080461.jpg"));// Hier das Bild Einladen 
		club.setVisible(true);

//Picutre Class

import javax.swing.*;
import javax.imageio.*;
import java.awt.*;
import java.io.*;
 
public class PictureClass extends JPanel { 
   private Image image;
 
   public PictureClass(String fileName) {
      try {
         image = ImageIO.read(new File(fileName));
      }
      catch(IllegalArgumentException iae) {
         JOptionPane.showMessageDialog(this, "Grafikdatei nicht gefunden!");
      }
      catch(IOException ioe) {
         JOptionPane.showMessageDialog(this, "Fehler beim Einlesen der Grafikdatei!");
      }
   }
 
   @Override
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      if(image != null) {
         g.drawImage(image,0,0, this);
      }
   }
}
	}

hab das club.add(new PictureClass("images/Disco-201020080461.jpg")); schon an anderen positionen gesetztda ich dachte das es zuerste geladen werden sollte oder so

im View hab ich es auch drin als add(new PictureClass("images/Disco-201020080461.jpg")); als erstes aber da zeigt er mir nich das bild an ^^
 
Bin ich blind oder hast du in deinem Code nichts von Buttons gepostet???:L???:L

Bitte korrigiere mich sollte ich falsch liegen. Ansonsten poste mal den Code mit den Buttons.
 
Hab es schon Hinbekommen hatte Frame und bei Frame geht das nicht so einfach hab nen JLabel genommen das auf die Größe des fensters gemacht und ein ICON drauf gehauen
 

Neue Themen


Zurück
Oben