Klassen Klassen miteinander Verbinden

fefarine

Mitglied
Hallo liebe Experten,

ich arbeite momentan an einem Kassiersystem für McDonalds (Schulprojekt).
Dafür benutze ich ein JDesktopPane und einige JInternalFrames, die ich in verschiedene Klassen aufgeteilt habe.

Nach viel Recherche und der Forensuche habe ich früher schonmal herausgefunden, wie man von einer Klasse aus auf eine andere zugreifen kann. Trotzdem besteht jetzt wieder ein Problem.

Die Klasse Interface, die alle JInternalFrames umfasst, muss immer wissen, welche Klasse mit welcher in Verbindung steht:

Code:
Klasse1 menu = new Klasse1(Klasse2, Klasse3);
Klasse2 bestellung = new Klasse2(Klasse1);

Nun muss ich mit Klasse2 allerdings auf das Interface selbst zugreifen.
In der Klasse2 selbst fuktioniert es soweit:

Code:
Interface window = new Interface();

public Klasse2 (Interface window){
this.window = window;
}
...

Aber was mache ich in der Klasse Interface?

Code:
Klasse2 bestellung = new Klasse2(Klasse2, Klasse3, ??);

Ich hoffe es war verständlich und jemand kann mir helfen :)
Liebe Grüße & ein schönes Wochenende wünsch ich euch
 

Asgar13

Bekanntes Mitglied
Beispiel-Interface:

Java:
import org.jetbrains.annotations.NotNull;

public interface InterfaceIOConnector {

    void initStorageItem(@NotNull String tableNamePattern, @NotNull String sql) throws IOConnectorException;

    @NotNull
    Object getCommandBody(@NotNull String sql) throws IOConnectorException;

    @NotNull
    Object getFunctionBody(@NotNull String sql) throws IOConnectorException;

    int executeCommand(@NotNull Object preparedStatement) throws IOConnectorException;

    void executeCommandWithCommit(@NotNull Object preparedStatement) throws IOConnectorException;

    @NotNull
    Object executeQuery(@NotNull Object preparedStatement) throws IOConnectorException;

    void commit() throws IOConnectorException;

    void rollback() throws IOConnectorException;

    void close() throws IOConnectorException;

}
 

fefarine

Mitglied
Danke für deine Antwort Asgar13, leider verstehe ich kein Wort.. ;D
Ich habe erst seit einem Jahr Java und musste schon oft feststellen, dass das nicht wirklich viel ist..
Wenn ich wüsste wie, würde ich gern mein komplettes Programm zeigen, um mein Niveau preiszugeben ;D Aber vielleicht reichen auch zwei Klassen.

Einmal das Interface - hier kommen alle Klassen zusammen.

Java:
public class Interface extends JFrame {
	final ImageIcon bg = new ImageIcon("mc_bg.jpg");
	Bestellung uebersicht = new Bestellung();
	Einzelbestellung auswahl = new Einzelbestellung(uebersicht);
	Menu menu = new Menu(uebersicht);
	Basics basics = new Basics(uebersicht, menu);
	Coupons coupons = new Coupons();
	JDesktopPane desktop = new JDesktopPane() 
	{
	      public void paintComponent(Graphics g) 
	      {
	        super.paintComponent(g);
	        g.drawImage(bg.getImage(), 0, 0, this);
	      }
	};
	
	//Datenbankkonfiguration
			JDBCAdapter jdbc = new JDBCAdapter("jdbc:mysql://localhost/db_mcdonalds", 
					"com.mysql.jdbc.Driver","root","");
	
	public Interface() {
		desktop.add(basics.inFrame);
		desktop.add(menu.inFrame);
		desktop.add(auswahl.inFrame);
		desktop.add(uebersicht.inFrame);
		desktop.setVisible(true);
		this.add(desktop);
		this.setSize(906,525);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		
		basics.inFrame.setLocation(0,400);
		menu.inFrame.setLocation(655,0);
		auswahl.inFrame.setLocation(0,0);
		uebersicht.inFrame.setLocation(340,20);
		coupons.inFrame.setLocation(655,0);
		coupons.inFrame.setVisible(false);
	}
	public static void main (String[] args){
		new Interface();
	}
}

und hier die Klasse, die unbedingt auf obrige zugreifen muss (!!):

Java:
public class Basics extends JFrame implements ActionListener {
	JDesktopPane desktop = new JDesktopPane();
	JInternalFrame inFrame = new JInternalFrame();
	JButton neu = new JButton("Neu");
	JButton finish = new JButton("Fertig");
	JButton logout = new JButton("Logout");
	JButton coupon = new JButton("Coupons");
	Bestellung bestellung = null;
	Menu menu = null;
	Date date = new Date();
	String test;
	int wert;
	int id;
	String take;
	DecimalFormat df = new DecimalFormat("0.00");
	
	//Datenbankkonfiguration
		JDBCAdapter jdbc = new JDBCAdapter("jdbc:mysql://localhost/db_mcdonalds", 
			"com.mysql.jdbc.Driver","root","");

	public Basics(Bestellung bestellung, Menu menu) {
		this.bestellung = bestellung;
		this.menu = menu;
		inFrame.setLayout(null);
		inFrame.add(neu);
		inFrame.add(finish);
		inFrame.add(logout);
		inFrame.add(coupon);
		inFrame.setLocation(0,20);
		inFrame.setVisible(true);
		inFrame.getContentPane().setBackground(new Color(0,0,0,0));  
		inFrame.setPreferredSize(new Dimension(900,90)); 
		inFrame.pack();
		desktop.add(inFrame);
		inFrame.setOpaque(false);
		desktop.setVisible(true);
		coupon.addActionListener(this);
		neu.addActionListener(this);
		finish.addActionListener(this);
		logout.addActionListener(this);
		inFrame.setBorder(null);
		
		logout.setBounds(273,12,90,30);
		finish.setBounds(373,12,90,30);
		neu.setBounds(473,12,90,30);
		coupon.setBounds(573,12,90,30);
		logout.setForeground(Color.BLACK);
		finish.setForeground(Color.BLACK);
		neu.setForeground(Color.BLACK);
		coupon.setForeground(Color.BLACK);
		
		//Gestaltung
		logout.setBackground(Color.RED);
		finish.setBackground(Color.GREEN);
		neu.setBackground(Color.decode("#fcb100"));
		coupon.setBackground(Color.decode("#fcb100"));
		((BasicInternalFrameUI) inFrame.getUI()).setNorthPane(null);
	}
	public void actionPerformed(ActionEvent event) {
		if ("Logout".equals(event.getActionCommand())){
			System.exit(0);
			//Login starten & alles andere schließen(!!)
		}
		if ("Neu".equals(event.getActionCommand())){
			bestellung.liste.removeAll();
			bestellung.bezeichnung.removeAll();
			bestellung.zahl = 0;
			bestellung.gesamtpreis.setText(""+bestellung.zahl);
			menu.big.setVisible(true);
			menu.medium.setVisible(true);
			menu.small.setVisible(true);
			menu.drink.removeAll();
			menu.drink.setVisible(false);
			menu.meal.removeAll();
			menu.meal.setVisible(false);
			menu.side_order.removeAll();
			menu.side_order.setVisible(false);
		}
		if ("Fertig".equals(event.getActionCommand())){
			if (bestellung.check.isSelected()) {bestellung.take=1; take= "zum mitnehmen";}
			else {bestellung.take=0; take = "zum hier essen";}
			
			try{
				jdbc.statement.executeUpdate
				("INSERT INTO tbl_bestellungen (datum, zeit, gesamtpreis, mitnehmen) VALUES ('"+(date.getYear()+1900)+"-"+(date.getMonth()+1)+"-"+date.getDate()+"','"+date.getHours()+":"+date.getMinutes()+"',"+bestellung.zahl+","+bestellung.take+");", Statement.RETURN_GENERATED_KEYS);
				ResultSet rs = jdbc.statement.getGeneratedKeys();
				if (rs.next()) {
					id = rs.getInt(1);
					System.out.println(id);
				}
				else{
				System.out.println("Fehler");
				}
				
				
				
				
				for (int i=0; i<bestellung.bezeichnung.countItems(); i++){
					System.out.println(bestellung.bezeichnung.getItem(i));
					jdbc.executeQuery("SELECT id FROM tbl_artikel WHERE bezeichnung='"+bestellung.bezeichnung.getItem(i)+"';");
					//System.out.println("hier: "+jdbc.getValueAt(0,0));
					wert = (Integer)jdbc.getValueAt(0,0);
					jdbc.statement.executeUpdate
					("INSERT INTO tbl_bestart (bestell_id, artikel_id) VALUES ("+id+","+wert+");");
				}
			}
			catch (Exception e){System.out.println("Fehler: " + e);e.printStackTrace();}
			
			JOptionPane.showMessageDialog(null, "Gesamtpreis: "+df.format(bestellung.zahl)+" € - "+take,"Bestellung #"+id, JOptionPane.INFORMATION_MESSAGE);
		}
		if ("Coupons".equals(event.getActionCommand())){
			//window.desktop.remove(window.menu.inFrame);
			//window.desktop.add(window.coupons.inFrame);
			coupon.setText("Menu");
		}
		if ("Menu".equals(event.getActionCommand())){
			//window.desktop.remove(window.coupons.inFrame);
			//window.desktop.add(window.menu.inFrame);
			coupon.setText("menu");
		}
	}
	
}

Könntet ihr mir eventuell helfen und auch erklären, da ich viele Attribute und Aktionen noch gar nicht kenne.. ich freue mich über jede Antwort.. :) LG
 

Xeonkryptos

Bekanntes Mitglied
Ich persönlich bin jetzt verwirrt. Asgar13 hat den Inhalt eines Interface gepostet, wie es von Sun/Oracle programmiert wurde und verwendet wird.

Du hast jetzt eine Klasse Interface (und der Name ist SEEEEEEEHR schlecht gewählt) der alle anderen Klassen bekannt sein sollen?

BTW: Benenne bitte deine Klasse "Interface" um, da Interface kein Name für eine Klasse ist, sondern eine weitere Datenstruktur neben den Enums und den Klassen! Interfaces haben Besonderheiten, weshalb ich auch vorhin von einer falschen Gedanken ausgegangen bin, denn ich und Asgar13 dachten, du meinst unter Verwendung von Interfaces und nicht unter Verwendung von Klassen!

Edit: Zum Thema Interfaces/Schnittstellen
 

fefarine

Mitglied
Oh, okay, dann verstehe ich, warum ich mit diesem Code so gar nichts anfangen konnte :)
Das benenn ich natürlich um. Habt ihr denn hierfür eine Lösung bzw. habt ihr mein Problem verstanden?
Ich komm einfach nicht weiter.. verzweife langsam.. Ich habe noch Zeit bis Weihnachten und bin eigentlich fertig, was das Grundgerüst angeht.. Jetzt kommt der Feinschliff, die kleinen Fehlerchen beseitigen und den Code für andere "lesbar" machen ;D

Meine Klasse Interface kann auf alle anderen Klassen zugreifen. Was aber, wenn nun eine dieser Klassen auf die Klasse Interface zugreifen muss? Wie erkläre ich das der Klasse Interface? ...

Liebe Grüße und einen schönen Abend noch :)
 

Fab1

Top Contributor
Hi fefarine,


Warum benutzt du so gut wie keine Methoden in deinem Programm? Bis auf die, die Pflicht sind, schreibst du komplett alles in den Konstruktor der entsprechenden Klasse.

Ich muss ganz ehrlich sagen, den Überblick habe ich nicht gefunden. Allerdings scheint es ja, dass du von einer Klasse etwas wissen möchtest.
So zu sagen einen Zustand (Instanzvariablen) in deinem Fall die "Verbindung".

Auf diese kannst du mithilfe von Getter und Setter Methoden zugreifen. Mehr dazu hier: Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 6.2 Privatsphäre und Sichtbarkeit oder einfach mal googeln.

Du möchtest ja wissen in welche Verbindung, die Klassen stehen oder so ähnlich. Dies könntest du dann eventuell mit einer Methode ähnlich wie diese zurückgeben (get)

Java:
public String getVerbindung(){ // String = der Typ der Verbindung (weiß nicht welchen du hast)
return verbindung;                 // so ähnlich könnte das ganze Aussehen
}

Beispiel ist jetzt weit her geholt, allerdings kenn ich deine genaue Problemstellung nicht. Evtl. einfach nochmal erklären.
 

fefarine

Mitglied
Lieben Dank für deine Antwort GEEK :)
Meine Methoden habe ich so erstellt und gefüllt, wie ich es bis jetzt gelernt habe. Dass ich da einfachere oder übersichtlichere Methoden erstelle kann, war bis nicht bekannt :) Aber ich lerne fleißig weiter :)

Ich versuch noch einmal mein Problem zu erklären...

Meine KlasseXY erstellt ein Fenster(JDesktopPane), das 5 Fenster-In-Fenster(JInternalFrame) anzeigen soll. Diese wurden alle in einer eigenen Klasse fertig gestellt (Klasse1 bis 5), um sie nur noch an das Fenster in Klasse XY dranzuhängen.

Dazu benötige ich eine Verbindung von KlasseXY zu jeder anderen Verbindung. Nach langem Suchen und einer weiteren Unterrichtsstunde konnte ich folgendes konstruieren, um von Klasse XY aus an eine andere Klasse zu kommen:

Java:
public class KlasseXY {
	Klasse1 eins = new Klasse1();
	Klasse2 zwei = new Klasse2();
	Klasse3 drei = new Klasse3();
	Klasse4 vier = new Klasse4();
	Klasse5 fünf = new Klasse5();
}

Wenn ich jetzt ein Fenster-In-Fenster einer Klasse 1 bis 5 in der KlasseXY benötige, kann ich dies bedenkenlos tu:

Java:
eins.frame.setVisible(true);

oder

Java:
desktop.add(eins.frame);

Soweit verständlich, hoffentlich..

Jetzt wird es komplizierter für mich, es zu erklären..
Um nun von der Klasse2 auf die Klasse3 zuzugreifen, muss ich (nach Aussage meines Lehrers) folgendermaßen vorgehen:

Java:
public class Klasse2{
	Klasse3 drei = new Klasse3();

	public Klasse2(Klasse3 drei){
		this.drei = drei;
		frame.add(drei.frame);
		//usw.
        }
}

Durch diese Konstellation bekomme ich ein Problem.. Ich muss in KlasseXY angeben, dass Klasse2 mit Klasse3 "verbunden" ist:

Java:
public class KlasseXY {
	Klasse1 eins = new Klasse1();
	Klasse2 zwei = new Klasse2(drei);
	Klasse3 drei = new Klasse3();
	Klasse4 vier = new Klasse4();
	Klasse5 fünf = new Klasse5();
}

Und das wird natürlich nur angenommen, wenn die KlasseXY die Klasse3 kennt. Also muss ich in diesem Fall umstellen:

Java:
public class KlasseXY {
	Klasse1 eins = new Klasse1();
	Klasse3 drei = new Klasse3();
	Klasse2 zwei = new Klasse2(drei);
	Klasse4 vier = new Klasse4();
	Klasse5 fünf = new Klasse5();
}

Sollte ich hier schon etwas falsch gemacht oder verstanden, dann klärt mich bitte auf, denn bis jetzt hat es bei mir so perfekt geklappt. Allerdings taucht jetzt ein scheinbar unüberwindbares Problem auf. Was ist, wenn die Klasse1 auf KlasseXY zugreifen muss? Klasse1 bekäme folgenden Code:

Java:
public class Klasse1{
	KlasseXY xy = new KlasseXY();

	public Klasse1(KlasseXY xy){
		this.xy = xy;
		//usw.
        }

	public void actionPerformed(ActionEvent event) {
		if (event.getSource().equals(button)){
			xy.frame.setSize(100,100);
			xy.frame.removeAll();
			//usw.
		}
	}
}

Aber auch KlasseXY muss nun wieder überarbeitet werden und hier weiß ich nicht weiter..

Java:
public class KlasseXY {
	Klasse1 eins = new Klasse1(xy);
	Klasse3 drei = new Klasse3();
	Klasse2 zwei = new Klasse2(drei);
	Klasse4 vier = new Klasse4();
	Klasse5 fünf = new Klasse5();
}

Denn "xy" wurde in der KlasseXY nirgens deklariert und kann somit auch nicht zugeordnet werden... Was muss ich nun machen, damit das fuktioniert?


Puuh, viel Text aber ich hoffe, es ist nun klarer :) Liebe Grüße
 

Xeonkryptos

Bekanntes Mitglied
Im Grunde stimmt es, was du sagst, aber mir stellen sich einige Fragen auf: Wieso sollten sich die Klassen untereinander kennen, wenn man sie schon in unterschiedliche Klassen aufteilt?

Mal zu einem Probs zu kommen. Das xy, welches du übergeben möchtest ist unnötig! Anstatt das xy in den Konstruktoraufruf zu packen, der in KlasseXY aufgerufen wird, musst du einfach nur "this" reinschreiben. Damit erhälst du eine Referenz auf die Klasse und kannst es einfach übergeben. In deiner Klasse1 erwartest du natürlich dann die KlasseXY als Datentyp, aber eine vorhergehende Initialisierung ist unnötig, da du die Referenz in einem Konstruktor der Variable schon übergibst.

Also:
Java:
public class KlasseXY {
    Klasse1 eins = new Klasse1(this); // this = Referenz der eigenen Klasse!
    Klasse3 drei = new Klasse3();
    Klasse2 zwei = new Klasse2(drei);
    Klasse4 vier = new Klasse4();
    Klasse5 fünf = new Klasse5();
}[code=Java]

[code=Java] KlasseXY xy; // Die reine Deklaration reicht, weil das Objekt unten zugewiesen wird und eine vorhergehende Initialisierung ist unnötig.
 
    public Klasse1(KlasseXY xy){
        this.xy = xy;
        //usw.
        }

Ich würde bei deinem Problem schon eher dazu tendieren, eine Oberklasse zu schreiben, die von JInternalFrames erbt und von der dann alle deine unteren Klassen erben, also deine internen Frames. Die Oberklasse liefert außer den JInternalFrames-Methoden noch die Methoden, die jedes weitere interne Frame gemein hat, wodurch eine Mehrfachimplementierung flach fällt und du eine einfachere Struktur wählen kannst.

Durch die Oberklasse kannst du dann in der KlasseXY ein Array der Oberklasse erstellen und packst deine Unterklassen initialisiert da rein:
Java:
public class Oberklasse extends JInternalFrame {
// implementiert alle notwendigen Methoden, die alle Unterklassen gemein haben.
}

Deine KlasseXY würde dann ggf so aussehen:
Java:
public class KlasseXY {
Oberklasse[] oberKlasse = new Oberklasse[5];
oberKlasse[0] = new Klasse1();
oberKlasse[1] = new Klasse2();
// etc.
}

Mal so ein kleinerer Ansatz, den man einfach und übersichtlich durchführen kann. Der Grund für unterschiedliche Klassen, die sich gegenseitig kennen müssen ist mir aber immer noch nicht klar, weshalb ich dir dahingehend nicht wirklich helfen kann. Es gibt zwar genug Möglichkeiten die Klassen an andere Klassen weiterzugeben bzw bekannt zu machen, aber viele sind nicht sehr sinnig. Daher kläre uns mal auf, wieso die Klassen sich alle kennen sollten?
 

fefarine

Mitglied
Liebe lieben Dank Xeonkryptos, du hast mir schon sehr geholfen. Mein Problem bekomm ich so hin. Was mein gesamtes Gerüst angeht, kann ich mir gut vorstellen, dass es ziemlich unübersichtlich und vielleicht ein klein wenig sinnlos scheint.. :( aber ich komm gerade gut klar damit..

Es ist so, dass die verschiedenen Klassen Teile meiner Bioniersoftware darstellen. Das eine beihnhaltet den Login(Klasse1), das andere die Menuauswahl(Klasse2), wie gesagt, Mc Donalds. Dann gibt es noch die Bestelluebersicht(Klasse3) und zwei weitere JInternalFrames (Einzelartikel und Gutscheine). Jetzt müssen die Klassen Menuauswahl, Einzelartikel und Gutscheine natürlich auf die Gesamtbestellung zugreifen können, um dieser mitzuteilen, dass etwas und WAS bestellt worden ist..

Eigentlich hatte ich es auch schon so gedacht, dass meine KlasseXY die Oberklasse ist, aber durch deine Idee, die gleichen Eigenschaften dort schon anzugeben, hab ich natürlich erheblich weniger Code :)

Wieder was dazu gelernt :)

Ich danke euch :) und melde mich, wenn ich wieder irgendwo hängenbleibe...

Liebe Grüße und einen schöen Samstag
 

fefarine

Mitglied
Hmm und schon das nächste Problem.. Aber hab gehört, dass es da wohl öfter zu Problemen kommt.. Ich schreibs direkt mal mit hier rein, damit ich kein neues Thema öffnen muss... Ich hoffe, ihr seid noch fit ;D

Und zwar geht es um mein Hintergrundbild. Es wird in KlasseXY erzeugt.

Java:
public KlasseXY{
	final ImageIcon bg = new ImageIcon("mc_bg.jpg");
	JDesktopPane desktop = new JDesktopPane() 
	{
	      public void paintComponent(Graphics g) 
	      {
	        super.paintComponent(g);
	        g.drawImage(bg.getImage(), 0, 0, this);
	      }
	};
        //usw.
}

Es fuktioniert super, hab es aus einem einem anderen Forum. So, nun muss ich dieses ImageIcon aber ändern und da liegt das Problem.. Wie änder ich das ggf. auch noch in einer anderen Klasse?

Ich hoffe, ihr könnt mir noch einmal unter die Arme greifen :)
Liebe Grüße
 

Xeonkryptos

Bekanntes Mitglied
Ändern kannst du das Bild, indem du einfach ein neues ImageIcon-Objekt erstellst und daraufhin die paintComponent-Methode aufrufst. Schon sollte dein Problem gelöst sein.

Und nochmal zum Verständnis:
Eine Oberklasse ist eine Klasse, die in der Vererbung über allen anderen Klassen steht. Zum Beispiel Object ist die oberste Klasse aller Klassen! Deine KlasseXY ist keine Oberklasse, da sie in keiner Klasse vererbt wird. Außerdem erstellst du in der KlasseXY die Objekte der anderen Klassen, was diese rein Ebenen technisch zu einer Unterklasse macht, da alles nach unten hin delegiert wird. Es beginnt alles mit der Main-Methode als unterstes Element und wird dann nach oben hin aufgebaut durch die Konstruktor-Aufrufe!
 

fefarine

Mitglied
Okay hab es mal so versucht. Das Hintergrundbild soll in der Klasse LOGIN geändert werden, sobald ein Button gedrückt wird:

Java:
public void actionPerformed(ActionEvent event){
				xy.desktop.hide();
				g.drawImage(xy.bg.getImage(), 0, 0, this);
				xy.desktop.paint();
				xy.desktop.show();
		}

Leider fuktioiert das nicht.. Hab ich etwas vergessen oder verwechselt?
In KlasseXY sind alle Bilder, die ich benötige, schon als final ImageIcon deklariert.
Jetzt müssen sie nur noch im richtigen Moment (durch ActionListener) "gezeichnet" werden. Wie kann ich oben aufgeführten Code umändern, dass es klappt?

Liebe Grüße :)
 
Zuletzt bearbeitet:

Xeonkryptos

Bekanntes Mitglied
Da alle Bilder schon in der KlasseXY vordefiniert sind und als final deklariert müsstest du in deine KlasseXY eine Methode schreiben, die einen String oder int-Typ erwartet, die du zuvor als Konstanten in deiner KlasseXY geschrieben hast. Diese Konstanten sollten public sein und für die Bilder stehen, die es zur Auswahl gibt.
Dazu deklarierst du eine Variable mit der Standardkonstanten für das Bild, welches zu Beginn ohne Eingriff angezeigt werden soll, damit dieses nicht 0 oder null ist. Die Methode, die ich erwähnt habe, übergibt den Parameter der Konstanten an die Variable, wodurch du beeinflussen kannst, welches Bild du gerne hättest. In deiner Methode paintComponent prüfst du auf diese Variable, welchen Wert sie inne hat und zeichnest daraufhin das passende Bild.

So würde ich das realisieren, wenn du alles als final deklariert hast.
 

fefarine

Mitglied
Hmm klingt logisch. Du sagst du würdest das machen, wenn ich final ImageIcons benutze. Gibt es eine alternative Lösung, wenn ich die ImageIcons nicht unveränderbar mache? Bin leider gerade unterwegs deswegen kann ich gerade nichts ausprobieren.. LG
 

Xeonkryptos

Bekanntes Mitglied
Wenn du sie nicht final machst, kannst du dein ImageIcon-Objekt jedes mal neu überschreiben. Du hättest dann keinen Zugriff mehr auf das "alte" Objekt/Bild, sofern du dieses nicht wieder neu lädst. Es bleibt halt die Frage, ob alle Bilder vorher definiert sein müssen oder ob es während der Laufzeit auch reicht, wenn immer nur ein paar Bilder bekannt sein müssen.
 

fefarine

Mitglied
Aber in diesem Fall würde doch obriger Code gelten oder? Dieser ändert leider trotzdem nichts... Probier jetzt schon wieder ne halbe Stunde rum und google, aber nichts hilft :( Könntest du mir vllt an einem Code erklären, wie ich das Hintergrund neu zeichne bzw. warum obriger Code nicht funktioniert?

Liebe Grüße :)
 

fefarine

Mitglied
Also wenn ich keine final ImageIcons habe, müsste doch folgendes funktionieren:

Java:
public void actionPerformed(ActionEvent event) {

					xy.desktop.paintComponents(xy.g);
					xy.g.drawImage(xy.bg.getImage(), 0, 0, xy);
					xy.desktop.hide();
					xy.desktop.show();
}

xy.g ist in diesem Fall die Graphic, die ich benötige, um das Bild zu zeichnen. xy.bg ist das ImageIcon.
Warum klappt dieser Code nicht?


Liebe Grüße & einen ruhigen Sonntag :)
 

Xeonkryptos

Bekanntes Mitglied
Das kann nicht funktionieren, weil du auf dein KlasseXY-Objekt versuchst den Variablen-Wert g zu übergeben und ich gehe mal stark davon aus, dass du keine öffentliche Variable in der Klasse KlasseXY hast, die ein Graphics-Objekt enthält!

Außerdem hast du mich diesbezüglich auch falsch verstanden. Ich meine das ohne final so:
Java:
public void actionPerformed(ActionEvent event){
                xy.desktop.hide();
                xy.bg = new ImageIcon("neuesBild");
                xy.desktop.paint();
                xy.desktop.show();
        }
So meine ich das mit dem Überschreiben. Die Basis ist aber die paintComponent-Methode in der Klasse KlasseXY, wie du sie unten geschrieben hast!
 

fefarine

Mitglied
Hallo ihr Lieben,

tut mir leid, dass ich mich jetzt erst melde, also, ich habe es gestern ausprobiert - und - es funktioniert :) mit desktop.repaint() allerdings, was ich sogar ganz alleine rausbekommen habe ;D

Java:
public void actionPerformed(ActionEvent event){
                xy.desktop.hide();
                xy.bg = new ImageIcon("neuesBild");
                xy.desktop.repaint();
                xy.desktop.show();
        }

Lieben Dank Xeonkryptos und an die anderen, die sich mit meinem Thema beschäftigt haben :)
Ich muss noch einiges lernen, aber es macht unglaublich Spaß. Haben gestern nun auch noch mit PHP angefangen 0.0

Wünsch euch einen schönen Abend,
liebe Grüße
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F OOP Klassen miteinander verbinden Java Basics - Anfänger-Themen 12
B Mehrere Klassen miteinander kommunizieren lassen Java Basics - Anfänger-Themen 4
J Zwei Klassen miteinander "verlinken" Java Basics - Anfänger-Themen 9
B Wie kommunizieren Klassen miteinander? (new ...) Java Basics - Anfänger-Themen 10
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
J Klassen Problem Java Basics - Anfänger-Themen 8
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
F Klassen und Pakete Projektübergreifend (Eclipse) Java Basics - Anfänger-Themen 6
V_Fynn03 Klassen Überweisungen tätigen und einzahlen mit 2 Klassen Java Basics - Anfänger-Themen 1
W Abarbeitungsreihenfolge Anonyme Klassen Java Basics - Anfänger-Themen 2
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
E Klassen implementieren Java Basics - Anfänger-Themen 94
T Interfaces in erbenden Klassen Java Basics - Anfänger-Themen 2
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
L Wie teilt man ein Programm in vernünftige Klassen ein? Java Basics - Anfänger-Themen 10
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
A Methode, Klassen Java Basics - Anfänger-Themen 3
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
G Klassen und Objekte Java Basics - Anfänger-Themen 2
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
D Klassen ausgeben Java Basics - Anfänger-Themen 2
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
Queiser Nicht statische Klassen Java Basics - Anfänger-Themen 6
neerual Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf? Java Basics - Anfänger-Themen 10
J Gleiche Methode in 2 verschiedenen Klassen - Lösung ? Java Basics - Anfänger-Themen 8
G Refactoring von mehreren identischen Klassen Java Basics - Anfänger-Themen 36
O Wrapper Klassen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben