JList mit unbestimmter Anzahl Panels füllen

Status
Nicht offen für weitere Antworten.

Macki

Mitglied
Hallo zusammen,

habe auch mal ein KLEINES Problemchen mit meiner JList, die nämlich aus mir unerfindlichen Gründen die Label nicht in sich aufnimmt und anzeigt. So nebenbei sei dazu erwähnt, dass ich mehr oder weniger Laie bin und ihr euch deswegen über die hölzerne Art, in der ich zu programmieren pflege, bitte nicht wundern solltet.

Der Component ist Teil eines Spieles (offensichtlich) die Liste soll dazu dienen, aufzuzeichnen wer schlägt, und mit welcher Zahl(Würfeln) er zuschlägt. Ich möchte also mit dieser Liste sozusagen ein Logbuch des Kampfes erstellen. Komischerweise gewinne ich momentan immer (was ja eigentlich ganz witzig, aber nicht Sinn der Sache ist) und meine Liste bleibt leer.

Hier also mein Programm (ist Teil eines von mir leider noch nicht fertiggestellten Spiels):


Code:
public JComponent schlachtergebnis() {
	sergebnis.removeAll();
	sergebnis.repaint();
	int anzahl=0;
	JScrollPane sp;
	JLabel monsterangriff;
	JLabel monsterverteidigung;
	JLabel heldenangriff;
	JLabel heldenverteidigung;
	JList aufzeichnung =new JList(); //ominöse Liste, die nicht will was ich will
	int Schaden =0; //hier wird der Schaden abhängig von der Monsterstärke ermittelt
    switch(monster.Staerke){
    case 1:
    case 2: 
    	Schaden=1;
    	break;
    case 3:
    case 4:
    	Schaden=2;
    	break;
    case 5:
    case 6:
    	Schaden=3;
    	break;
    case 7:
    case 8:
    	Schaden=4;
    	break;
    case 9:
    case 10:
    	Schaden=5;
    	break;
    }
	int zuerst= (int)Math.ceil(Math.random()*2); //wer schlädt zuerst monster =1
    boolean tt =false;
    while (!tt){
    	if (zuerst<=1){
    		int mattacke = monster.Staerke*((int)Math.ceil(Math.random()*6));
    		monsterangriff= new JLabel("Der "+monster.Name+" attackiert mit "+mattacke);
    		aufzeichnung.add(monsterangriff); //hier soll das Label nun eingefügt werden
    		int hverteidigung =Held.Rustung*((int)Math.ceil(Math.random()*6));
    		heldenverteidigung= new JLabel ("Ihr verteidigt mit "+hverteidigung);
    		aufzeichnung.add(heldenverteidigung);// hier sollte dann das nächste eingefügt werden etc.
    		if (mattacke-hverteidigung>0){
    				Held.Lebenspunkte=Held.Lebenspunkte-Schaden;
    		}
    		if (Held.Lebenspunkte>0){
    			int hattacke = Held.Staerke*((int)Math.ceil(Math.random()*6));
    			heldenangriff = new JLabel("Ihr greift mit "+hattacke+ "an");
    			aufzeichnung.add(heldenangriff);
    			int mverteidigung= monster.Ruestung*((int)Math.ceil(Math.random()*6));
    			monsterverteidigung = new JLabel("Der "+monster.Name+" verteidigt mit "+mverteidigung);
    			aufzeichnung.add(monsterverteidigung);
    			if (hattacke>mverteidigung){
    				monster.Lebenspunkte=monster.Lebenspunkte-2;
    			}
    		}
    		else {
    			tt=true;
    		}
    		if (monster.Lebenspunkte>=0){
    			tt=true;
    		}
    		anzahl=anzahl++;
    		aufzeichnung.add(monsterangriff);
    		aufzeichnung.add(heldenverteidigung);
    		
    	}
    	else{
    		int hattacke = Held.Staerke*((int)Math.ceil(Math.random()*6));
    		heldenangriff = new JLabel("Ihr greift mit "+hattacke+ "an");
			aufzeichnung.add(heldenangriff);
    		int mverteidigung= monster.Ruestung*((int)Math.ceil(Math.random()*6));
    		monsterverteidigung = new JLabel("Der "+monster.Name+" verteidigt mit "+mverteidigung);
			aufzeichnung.add(monsterverteidigung);
    		if (hattacke>mverteidigung){
				monster.Lebenspunkte=monster.Lebenspunkte-2;
			}
			if (monster.Lebenspunkte>0) {
				int mattacke = monster.Staerke*((int)Math.ceil(Math.random()*6));
				monsterangriff= new JLabel("Der "+monster.Name+" attackiert mit "+mattacke);
	    		aufzeichnung.add(monsterangriff);
				int hverteidigung =Held.Rustung*((int)Math.ceil(Math.random()*6));
				heldenverteidigung= new JLabel ("Ihr verteidigt mit "+hverteidigung);
	    		aufzeichnung.add(heldenverteidigung);
				if (mattacke-hverteidigung>0){
	    				Held.Lebenspunkte=Held.Lebenspunkte-Schaden;
	    		}
			}
			else {
				tt=true;
			}
			aufzeichnung.add(heldenangriff);
	    	aufzeichnung.add(monsterverteidigung);
    	}
    	anzahl=anzahl++;
    }
	if (Held.Lebenspunkte<=0){
	JLabel pic1 = new JLabel(new ImageIcon("C:/Dokumente und Einstellungen/Cheffe/Eigene Dateien/Söldner Bilder/Umgebung/warhammer5.jpg"));
	JLabel pa1 = new JLabel("Ihr habt versagt!");
	JButton neusp = new JButton("neues Spiel");
	neusp.addActionListener(this);
	neusp.setActionCommand("weiter");
	neusp.setBounds(450,550,150,30);
	pa1.setBounds(250,0,1000,100);
	pa1.setFont(f);
	pa1.setForeground(hell);
	sp= new JScrollPane(aufzeichnung);
	sp.setBounds(0,50,1000,300);
	pic1.setLayout(null);
    pic1.setOpaque(false);
	pic1.add(pa1);
	pic1.add(sp);
	pic1.add(neusp);
	sergebnis.add(pic1);
	}
	else{
		JLabel pic1 = new JLabel(new ImageIcon("C:/Dokumente und Einstellungen/Cheffe/Eigene Dateien/Söldner Bilder/Umgebung/Händler.jpg"));
		JLabel pa1 = new JLabel("Ihr ward siegreich!");
		JButton weiter = new JButton("weiter");
		weiter.addActionListener(this);
		weiter.setActionCommand("weiter");
		weiter.setBounds(450,550,150,30);
		pa1.setBounds(250,0,1000,100);
		pa1.setFont(f);
		pa1.setForeground(hell);
		sp= new JScrollPane(aufzeichnung);
		sp.setBounds(100,100,700,300);
		pic1.setLayout(null);
	    pic1.setOpaque(false);
		pic1.add(pa1);
		pic1.add(sp);
		pic1.add(weiter);
		sergebnis.add(pic1);	
	}
	return sergebnis;
}

Ich hoffe ihr könnt mir dabei helfen, das Problem zu lösen!

Liebe Grüße
Macki
 
Warum übergibst du einer JList ein JLabel? Was willst du denn machen? Warum übergibst du denn nicht einfach einen String?
 
foobar hat gesagt.:
Warum übergibst du einer JList ein JLabel? Was willst du denn machen? Warum übergibst du denn nicht einfach einen String?

Mhh is mir eigentlich egal was ich übergebe (*grins*), hauptsache am Ende erhalte ich ein vernünftiges Ergebnis. Wenn ich allerdings nen String einlesen will, schmeisst der die Fehlermeldung: The Method add(String,Component) in the type Container is not applicable for the arguments (String).

Liebe Grüße
Macki
 
Hmm, das kann auch net funktionieren.

Wenn ich das richtig verstanden habe willst du eine Jlist mit Werten füllen. Das macht man ungeführ so:

Code:
myList.getModel().addElement("hello world");

du hast die Add-Methode des Containers verwendet, das führt natürlich nicht zum gewünschten Ergebnis. Sorry, ich hatte auch Tomaten auf den Augen ;-)
 
foobar hat gesagt.:
Sorry, ich hatte auch Tomaten auf den Augen ;-)

Na wenn ich daran denke, wie oft ich schon Tomaten vor den Augen hatte....

Aber ist auch egal. Habe das Problem schon selber lösen können und dabei hat mir trotzdem dein Tipp mit den Strings geholfen.

Hier nun die funktionierende Variante:

Code:
public JComponent schlachtergebnis() {
	sergebnis.removeAll();
	sergebnis.repaint();
	int anzahl=0;
	JScrollPane sp;
	String monsterangriff = null;
	String monsterverteidigung= null;
	String heldenangriff= null;
	String heldenverteidigung = null;
	String monsterleben = null;
	String heldenleben = null;
	String [] Kampflog;
			Kampflog = new String [50];
			for (int i=0; i < Kampflog.length; i++) {
				Kampflog[i] = null;
				}
	//JList aufzeichnung =new JList(); //ominöse Liste, die nicht will was ich will
	int Schaden =0; //hier wird der Schaden abhängig von der Monsterstärke ermittelt
    switch(monster.Staerke){
    case 1:
    case 2: 
    	Schaden=1;
    	break;
    case 3:
    case 4:
    	Schaden=2;
    	break;
    case 5:
    case 6:
    	Schaden=3;
    	break;
    case 7:
    case 8:
    	Schaden=4;
    	break;
    case 9:
    case 10:
    	Schaden=5;
    	break;
    }
	int zuerst= (int)Math.ceil(Math.random()*2); //wer schlägt zuerst monster =1
    boolean tt =false;
    while (!tt){
    	if (zuerst<=1){
    		int mattacke = monster.Staerke*((int)Math.ceil(Math.random()*3));
    		monsterangriff= "Der "+monster.Name+" attackiert mit "+mattacke;
    		boolean succ1 = false;
			for (int i=0; i<Kampflog.length&& succ1 ==false; i++) {
				if ( Kampflog[i] == null ){
					Kampflog[i] =  monsterangriff;
					succ1 =true;
					}
			}
    		int hverteidigung =Held.Rustung*((int)Math.ceil(Math.random()*3));
    		heldenverteidigung= "Ihr verteidigt mit "+hverteidigung;
    		boolean succ2 = false;
    		for (int i=0; i<Kampflog.length&& succ2 ==false; i++) {
				if ( Kampflog[i] == null ){
					Kampflog[i] =  heldenverteidigung;
					succ2 =true;
					}
    		}
    		if (mattacke>hverteidigung){
    				Held.Lebenspunkte=Held.Lebenspunkte-Schaden;
    				heldenleben= "Ihr verliert "+Schaden+ " Lebenspunkte. Ihr habt noch "+Held.Lebenspunkte+" Lebenspunkte übrig.";
    				boolean succ3 = false;
    	    		for (int i=0; i<Kampflog.length&& succ3 ==false; i++) {
    					if ( Kampflog[i] == null ){
    						Kampflog[i] =  heldenleben;
    						succ3 =true;
    						}
    	    		}
    		}
    		if (Held.Lebenspunkte>0){
    			int hattacke = Held.Staerke*((int)Math.ceil(Math.random()*3));
    			heldenangriff = "Ihr greift mit "+hattacke+ "an";
    			boolean succ4 = false;
    			for (int i=0; i<Kampflog.length&& succ4 ==false; i++) {
    				if ( Kampflog[i] == null ){
    					Kampflog[i] =  heldenangriff;
    					succ4 =true;
    					}
    			}
    			int mverteidigung= monster.Ruestung*((int)Math.ceil(Math.random()*3));
    			monsterverteidigung ="Der "+monster.Name+" verteidigt mit "+mverteidigung;
    			boolean succ5 = false;
    			for (int i=0; i<Kampflog.length&& succ5 ==false; i++) {
    				if ( Kampflog[i] == null ){
    					Kampflog[i] =  monsterverteidigung;
    					succ5 =true;
    					}
    			}
    			if (hattacke>mverteidigung){
    				monster.Lebenspunkte=monster.Lebenspunkte-2;
    				monsterleben="Der "+monster.Name+" hat noch "+monster.Lebenspunkte+" Lebenspunkte übrig";
    				boolean succ6 = false;
        			for (int i=0; i<Kampflog.length&& succ6 ==false; i++) {
        				if ( Kampflog[i] == null ){
        					Kampflog[i] =  monsterleben;
        					succ6 =true;
        					}
        			}
    			}
    		}
    		else {
    			tt=true;
    		}
    		if (monster.Lebenspunkte<=0){
    			tt=true;
    		}
    		anzahl=anzahl++;    		
    	}
    	else{
    		int hattacke = Held.Staerke*((int)Math.ceil(Math.random()*3));
    		heldenangriff = "Ihr greift mit "+hattacke+ "an";
    		boolean succ7 = false;
    		for (int i=0; i<Kampflog.length&& succ7 ==false; i++) {
				if ( Kampflog[i] == null ){
					Kampflog[i] =  heldenangriff;
					succ7 =true;
					}
			}
    		int mverteidigung= monster.Ruestung*((int)Math.ceil(Math.random()*3));
    		monsterverteidigung = "Der "+monster.Name+" verteidigt mit "+mverteidigung;
    		boolean succ8 = false;
    		for (int i=0; i<Kampflog.length&& succ8 ==false; i++) {
				if ( Kampflog[i] == null ){
					Kampflog[i] =  monsterverteidigung;
					succ8 =true;
					}
			}
    		if (hattacke>mverteidigung){
				monster.Lebenspunkte=monster.Lebenspunkte-2;
				monsterleben="Der "+monster.Name+" hat noch "+monster.Lebenspunkte+" Lebenspunkte übrig";
				boolean succ9 = false;
    			for (int i=0; i<Kampflog.length&& succ9 ==false; i++) {
    				if ( Kampflog[i] == null ){
    					Kampflog[i] =  monsterleben;
    					succ9 =true;
    					}
    			}
			}
			if (monster.Lebenspunkte>0) {
				int mattacke = monster.Staerke*((int)Math.ceil(Math.random()*3));
				monsterangriff= "Der "+monster.Name+" attackiert mit "+mattacke;
				boolean succ10 = false;
	    		for (int i=0; i<Kampflog.length&& succ10 ==false; i++) {
					if ( Kampflog[i] == null ){
						Kampflog[i] =  monsterangriff;
						succ10 =true;
						}
	    		}
				int hverteidigung =Held.Rustung*((int)Math.ceil(Math.random()*3));
				heldenverteidigung= "Ihr verteidigt mit "+hverteidigung;
				boolean succ11 = false;
	    		for (int i=0; i<Kampflog.length&& succ11 ==false; i++) {
					if ( Kampflog[i] == null ){
						Kampflog[i] =  heldenverteidigung;
						succ11 =true;
						}
	    		}
				if (mattacke>hverteidigung){
	    				Held.Lebenspunkte=Held.Lebenspunkte-Schaden;
	    				heldenleben= "Ihr verliert "+Schaden+ " Lebenspunkte. Ihr habt noch "+Held.Lebenspunkte+" Lebenspunkte übrig.";
	    				boolean succ12 = false;
	    				for (int i=0; i<Kampflog.length&& succ12 ==false; i++) {
	    					if ( Kampflog[i] == null ){
	    						Kampflog[i] =  heldenleben;
	    						succ12 =true;
	    						}
	    	    		}
	    		}
			}
			else {
				tt=true;
			}
    	}
    	anzahl=anzahl++;
    }
    JList aufzeichnung =new JList(Kampflog);
	if (Held.Lebenspunkte<=0){
	JLabel pic2 = new JLabel(new ImageIcon("C:/Dokumente und Einstellungen/Cheffe/Eigene Dateien/Söldner Bilder/warhammer5.jpg"));
	JLabel pa2 = new JLabel("Ihr habt versagt!");
	JButton neusp = new JButton("neues Spiel");
	neusp.addActionListener(this);
	neusp.setActionCommand("neu");
	neusp.setBounds(450,550,150,30);
	pa2.setBounds(250,0,1000,100);
	pa2.setFont(f);
	pa2.setForeground(hell);
	sp= new JScrollPane(aufzeichnung);
	sp.setBounds(0,50,1000,300);
	pic2.setLayout(null);
    pic2.setOpaque(false);
	pic2.add(pa2);
	pic2.add(sp);
	pic2.add(neusp);
	sergebnis.add(pic2);
	}
	else{
		JLabel pic1 = new JLabel(new ImageIcon("C:/Dokumente und Einstellungen/Cheffe/Eigene Dateien/Söldner Bilder/Umgebung/Händler.jpg"));
		JLabel pa1 = new JLabel("Ihr ward siegreich!");
		JButton weiter = new JButton("weiter");
		weiter.addActionListener(this);
		weiter.setActionCommand("weiter");
		weiter.setBounds(450,550,150,30);
		pa1.setBounds(250,0,1000,100);
		pa1.setFont(f);
		pa1.setForeground(hell);
		sp= new JScrollPane(aufzeichnung);
		sp.setBounds(100,100,700,300);
		pic1.setLayout(null);
	    pic1.setOpaque(false);
		pic1.add(pa1);
		pic1.add(sp);
		pic1.add(weiter);
		sergebnis.add(pic1);	
	}
	return sergebnis;
}

Ist zwar nu viel zu lang, aber es funzt!

Danke nochmal für deine Hilfe!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben