Java Button soll verschiedene panel zufällig durchschalten

ThE_sMoKeY_jOe

Lt. Junior Grade
Registriert
Mai 2004
Beiträge
472
Hi und ein Frohes neues Jahr euch allen,
muss als Studienprojekt ein JavaGame basteln, allerdings reicht mein Wissen was Java betrifft einfach nicht aus und ich finde einfach keine Lösung.
Kurze erklärung zum Game, beim Klick auf start sollen 5 verschiedene Panel zufällig nacheinander angezeigt werden.
Jedes bis auf 1 Panel 2x.....das Panel, welches nur 1 x vorkam muss vom Spieler dann angeklickt werden.
Wir haben die komplette GUI mit WindowBuilder erstellt und nun hänge ich eben am Startbutton, ich bekomme es einfach nicht hin, dass die Panel angezeigt werden.

Hier mal der Code, die wichtigen Stellen sind Fett/Kursiv
Code:
package Main;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Toolkit;
import java.awt.CardLayout;
import java.awt.Color;
import javax.swing.JLayeredPane;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTabbedPane;
import javax.swing.ImageIcon;
import java.awt.Font;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.SwingConstants;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.DropMode;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.JTextField;

public class theGame extends JFrame {
	private JTextField restZeit;
	private JTextField textField_1;

	/**
	 * Launch the application.
	 */
	public boolean start = false;
	
	public static void main(String[] args) {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Throwable e) {
			e.printStackTrace();
		}
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					theGame frame = new theGame();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public theGame() {
		
		setTitle("Schere-Stein-Papier-Echse-Spock v1.0");
		setResizable(false);
		setIconImage(Toolkit.getDefaultToolkit().getImage(theGame.class.getResource("/Icons/Schere-Stein-Papier-Eidechse-Spock.png")));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 800, 700);
		
		//Cardlayout Ebenen
		
		final JPanel Home = new JPanel();
		Home.setBackground(Color.BLACK);
		
		final JPanel Anleitung = new JPanel();
		Anleitung.setBackground(Color.BLACK);
		
		final JPanel Ende = new JPanel();
		Ende.setBackground(new Color(255, 255, 255));
		
		final JPanel Game = new JPanel();
		Game.setBackground(new Color(0, 0, 0));
		
		JButton btnStart = new JButton("SPIEL STARTEN");
		btnStart.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Home.setVisible(false);
				Anleitung.setVisible(false);
				Game.setVisible(true);
			}
		});
		btnStart.setToolTipText("");
		btnStart.setHorizontalAlignment(SwingConstants.LEFT);
		btnStart.setFont(new Font("Impact", Font.PLAIN, 22));
		btnStart.setIcon(new ImageIcon(theGame.class.getResource("/Icons/inward-black-logoff.png")));
		btnStart.setBackground(new Color(65, 105, 225));
		btnStart.setForeground(new Color(0, 0, 0));
		
		JButton btnAnleitung = new JButton("ANLEITUNG");
		btnAnleitung.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Home.setVisible(false);
				Anleitung.setVisible(true);
			}
		});
		btnAnleitung.setHorizontalAlignment(SwingConstants.LEFT);
		btnAnleitung.setIcon(new ImageIcon(theGame.class.getResource("/Icons/inward-black-info.png")));
		btnAnleitung.setForeground(Color.BLACK);
		btnAnleitung.setFont(new Font("Impact", Font.PLAIN, 22));
		btnAnleitung.setBackground(new Color(65, 105, 225));
		
		JLabel logo = new JLabel("New label");
		logo.setIcon(new ImageIcon(theGame.class.getResource("/Icons/Schere-Stein-Papier-Eidechse-Spock.png")));
		
		JLabel lblScheresteinpapier = new JLabel("SCHERE-STEIN-PAPIER");
		lblScheresteinpapier.setFont(new Font("Impact", Font.PLAIN, 40));
		lblScheresteinpapier.setForeground(new Color(255, 255, 255));
		
		JLabel lblEchsespock = new JLabel("ECHSE-SPOCK");
		lblEchsespock.setFont(new Font("Impact", Font.PLAIN, 40));
		lblEchsespock.setForeground(new Color(255, 255, 255));
		
		JLabel lblTheGame = new JLabel("The game");
		lblTheGame.setFont(new Font("Impact", Font.BOLD, 60));
		lblTheGame.setForeground(new Color(255, 255, 255));
		GroupLayout gl_Home = new GroupLayout(Home);
		gl_Home.setHorizontalGroup(
			gl_Home.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_Home.createSequentialGroup()
					.addGap(301)
					.addComponent(logo, GroupLayout.PREFERRED_SIZE, 192, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(301, Short.MAX_VALUE))
				.addGroup(gl_Home.createSequentialGroup()
					.addGap(270)
					.addGroup(gl_Home.createParallelGroup(Alignment.TRAILING)
						.addComponent(btnStart, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 255, Short.MAX_VALUE)
						.addComponent(btnAnleitung, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 255, Short.MAX_VALUE))
					.addGap(269))
				.addGroup(gl_Home.createSequentialGroup()
					.addGap(266)
					.addComponent(lblTheGame)
					.addContainerGap(265, Short.MAX_VALUE))
				.addGroup(gl_Home.createSequentialGroup()
					.addGap(224)
					.addComponent(lblScheresteinpapier)
					.addContainerGap(224, Short.MAX_VALUE))
				.addGroup(gl_Home.createSequentialGroup()
					.addGap(289)
					.addComponent(lblEchsespock)
					.addContainerGap(288, Short.MAX_VALUE))
		);
		gl_Home.setVerticalGroup(
			gl_Home.createParallelGroup(Alignment.TRAILING)
				.addGroup(gl_Home.createSequentialGroup()
					.addGap(22)
					.addComponent(lblScheresteinpapier)
					.addGap(11)
					.addComponent(lblEchsespock)
					.addGap(18)
					.addComponent(lblTheGame)
					.addPreferredGap(ComponentPlacement.RELATED, 29, Short.MAX_VALUE)
					.addComponent(logo)
					.addGap(18)
					.addComponent(btnStart)
					.addGap(18)
					.addComponent(btnAnleitung, GroupLayout.PREFERRED_SIZE, 73, GroupLayout.PREFERRED_SIZE)
					.addGap(49))
		);
		Home.setLayout(gl_Home);
		
		
		
		
		
		getContentPane().setLayout(new CardLayout(0, 0));
		getContentPane().add(Home, "name_38422498199445");
		getContentPane().add(Anleitung, "name_38422509554768");
		getContentPane().add(Game, "name_38422520771154");
		
		JButton btnStein = new JButton("");
		btnStein.setBackground(new Color(0, 0, 0));
		btnStein.setIcon(new ImageIcon(theGame.class.getResource("/Icons/steine_2.JPG")));
		
		JButton btnEchse = new JButton("");
		btnEchse.setBackground(new Color(0, 0, 0));
		btnEchse.setIcon(new ImageIcon(theGame.class.getResource("/Icons/eidechse_9.JPG")));
		
		JButton btnSpock = new JButton("");
		btnSpock.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Game.setVisible(false);
				Ende.setVisible(true);
			}
		});
		btnSpock.setBackground(new Color(0, 0, 0));
		btnSpock.setIcon(new ImageIcon(theGame.class.getResource("/Icons/star_trek_sticker_spock__24443.jpg")));
		
		JButton btnSchere = new JButton("");
		btnSchere.setBackground(new Color(0, 0, 0));
		btnSchere.setIcon(new ImageIcon(theGame.class.getResource("/Icons/schere_6.JPG")));
		
		JButton btnNewButton = new JButton("");
		btnNewButton.setBackground(new Color(0, 0, 0));
		btnNewButton.setIcon(new ImageIcon(theGame.class.getResource("/Icons/blatt-papier-t10263.jpg")));
		
		JPanel panelAnzeige = new JPanel();
		panelAnzeige.setBackground(new Color(0, 0, 0));
		
		restZeit = new JTextField();
		restZeit.setHorizontalAlignment(SwingConstants.CENTER);
		restZeit.setForeground(new Color(255, 255, 255));
		restZeit.setBackground(new Color(0, 0, 0));
		restZeit.setEditable(false);
		restZeit.setColumns(10);
		
		JLabel lblGewonneneRunden = new JLabel("GEWONNENE RUNDEN");
		lblGewonneneRunden.setFont(new Font("Impact", Font.PLAIN, 22));
		lblGewonneneRunden.setForeground(new Color(255, 255, 255));
		
		textField_1 = new JTextField();
		textField_1.setHorizontalAlignment(SwingConstants.RIGHT);
		textField_1.setForeground(new Color(255, 255, 255));
		textField_1.setBackground(new Color(0, 0, 0));
		textField_1.setColumns(10);
		
		JLabel lblVerbleibendeZeit = new JLabel("VERBLEIBENDE ZEIT");
		lblVerbleibendeZeit.setFont(new Font("Impact", Font.PLAIN, 22));
		lblVerbleibendeZeit.setForeground(new Color(255, 255, 255));
		
		JLabel lblLetsGetReady = new JLabel("LET'S GET READY TO RUMBLE...");
		lblLetsGetReady.setFont(new Font("Impact", Font.PLAIN, 30));
		lblLetsGetReady.setForeground(new Color(255, 255, 255));
		GroupLayout gl_Game = new GroupLayout(Game);
		gl_Game.setHorizontalGroup(
			gl_Game.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_Game.createSequentialGroup()
					.addGap(128)
					.addComponent(panelAnzeige, GroupLayout.PREFERRED_SIZE, 539, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(127, Short.MAX_VALUE))
				.addGroup(gl_Game.createSequentialGroup()
					.addGap(354)
					.addComponent(restZeit, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(354, Short.MAX_VALUE))
				.addGroup(gl_Game.createSequentialGroup()
					.addContainerGap(698, Short.MAX_VALUE)
					.addComponent(textField_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addContainerGap())
				.addGroup(gl_Game.createSequentialGroup()
					.addGap(318)
					.addComponent(lblVerbleibendeZeit)
					.addContainerGap(317, Short.MAX_VALUE))
				.addGroup(gl_Game.createSequentialGroup()
					.addGap(15)
					.addGroup(gl_Game.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_Game.createSequentialGroup()
							.addComponent(lblLetsGetReady)
							.addPreferredGap(ComponentPlacement.RELATED, 290, Short.MAX_VALUE)
							.addComponent(lblGewonneneRunden)
							.addContainerGap())
						.addGroup(gl_Game.createSequentialGroup()
							.addComponent(btnSchere)
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addComponent(btnStein, GroupLayout.PREFERRED_SIZE, 145, GroupLayout.PREFERRED_SIZE)
							.addGap(10)
							.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 149, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addComponent(btnEchse, GroupLayout.PREFERRED_SIZE, 151, Short.MAX_VALUE)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(btnSpock)
							.addGap(14))))
		);
		gl_Game.setVerticalGroup(
			gl_Game.createParallelGroup(Alignment.TRAILING)
				.addGroup(Alignment.LEADING, gl_Game.createSequentialGroup()
					.addGroup(gl_Game.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_Game.createSequentialGroup()
							.addGap(81)
							.addComponent(lblGewonneneRunden)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(textField_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
						.addGroup(gl_Game.createSequentialGroup()
							.addGap(56)
							.addComponent(lblLetsGetReady)))
					.addGap(42)
					.addComponent(panelAnzeige, GroupLayout.PREFERRED_SIZE, 175, GroupLayout.PREFERRED_SIZE)
					.addGap(85)
					.addComponent(lblVerbleibendeZeit)
					.addGap(11)
					.addComponent(restZeit, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addGap(18)
					.addGroup(gl_Game.createParallelGroup(Alignment.LEADING)
						.addComponent(btnSchere, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
						.addComponent(btnStein, Alignment.TRAILING)
						.addComponent(btnNewButton, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 137, Short.MAX_VALUE)
						.addComponent(btnEchse, Alignment.TRAILING, GroupLayout.PREFERRED_SIZE, 137, GroupLayout.PREFERRED_SIZE)
						.addComponent(btnSpock, Alignment.TRAILING))
					.addGap(24))
		);
		panelAnzeige.setLayout(new CardLayout(0, 0));
		
		
		[B][I]String[] randomZahl={"0","0","1","1","2","2","3","3","4","4"};
		Randomizer rnd = new Randomizer();
		//System.out.println(rnd.random());
		JLabel lblEchse = new JLabel("ECHSE");
		lblEchse.setHorizontalAlignment(SwingConstants.CENTER);
		lblEchse.setFont(new Font("Impact", Font.PLAIN, 80));
		lblEchse.setForeground(new Color(255, 255, 255));
		//panelAnzeige.add(lblEchse, "name_45662879437764");
	
		JLabel lblPapier = new JLabel("PAPIER");
		lblPapier.setFont(new Font("Impact", Font.PLAIN, 80));
		lblPapier.setForeground(new Color(255, 255, 255));
		lblPapier.setHorizontalAlignment(SwingConstants.CENTER);
		//panelAnzeige.add(lblPapier, "name_45592279956646");
		
		JLabel lblStein = new JLabel("STEIN");
		lblStein.setHorizontalAlignment(SwingConstants.CENTER);
		lblStein.setFont(new Font("Impact", Font.PLAIN, 80));
		lblStein.setForeground(new Color(255, 255, 255));
		//panelAnzeige.add(lblStein, "name_45514248576573");
		
		JLabel lblSchere = new JLabel("SCHERE");
		lblSchere.setBackground(new Color(0, 0, 0));
		lblSchere.setForeground(new Color(255, 255, 255));
		lblSchere.setFont(new Font("Impact", Font.PLAIN, 80));
		lblSchere.setHorizontalAlignment(SwingConstants.CENTER);
		//panelAnzeige.add(lblSchere, "name_45243146397439");
		
		JLabel lblSpock = new JLabel("SPOCK");
		lblSpock.setFont(new Font("Impact", Font.PLAIN, 80));
		lblSpock.setForeground(new Color(255, 255, 255));
		lblSpock.setHorizontalAlignment(SwingConstants.CENTER);
		//panelAnzeige.add(lblSpock, "name_45709799146917");
		
		/*if(rnd.random() == "0"){
			panelAnzeige.add(lblEchse, "name_45662879437764");
		}
		else if (rnd.random() == "1"){
			panelAnzeige.add(lblPapier, "name_45592279956646");	
		}
		else if (rnd.random() == "2"){
			panelAnzeige.add(lblStein, "name_45514248576573");
		}
		else if (rnd.random() == "3"){
			panelAnzeige.add(lblSchere, "name_45243146397439");
		}
		else if (rnd.random() == "4"){
			panelAnzeige.add(lblSpock, "name_45709799146917");
		}
		*/
		rnd.random(randomZahl);
		/*
		if(start == true) {
		
		for(int x=0;x<9;x++){
			switch(randomZahl[x]){
			
			case "0":
				panelAnzeige.add(lblSchere, "name_45243146397439");
				continue;
			
			case "1":
				panelAnzeige.add(lblStein, "name_45514248576573");
				continue;
				
			case "2":
				panelAnzeige.add(lblPapier, "name_45592279956646");
				continue;
				
			case "3":
				panelAnzeige.add(lblEchse, "name_45662879437764");
				continue;
				
			case "4":
				panelAnzeige.add(lblSpock, "name_45709799146917");
				continue;
				
					
			}
		}
		}
		*/[/I][/B]
		Game.setLayout(gl_Game);
		getContentPane().add(Ende, "name_38434235034777");
		
		
		
		JLabel gameover = new JLabel("GAME OVER");
		gameover.setFont(new Font("Impact", Font.PLAIN, 80));
		gameover.setForeground(new Color(128, 0, 0));
		gameover.setHorizontalAlignment(SwingConstants.CENTER);
		
		JLabel picEnde = new JLabel("");
		picEnde.setIcon(new ImageIcon(theGame.class.getResource("/Icons/951955_Crimen_620.jpg")));
		
		JButton btnNeustart = new JButton("NEUSTART");
		btnNeustart.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Ende.setVisible(false);
				Home.setVisible(true);
			}
		});
		btnNeustart.setFont(new Font("Impact", Font.PLAIN, 22));
		btnNeustart.setBackground(new Color(128, 0, 0));
		btnNeustart.setForeground(new Color(255, 255, 255));
		GroupLayout gl_Ende = new GroupLayout(Ende);
		gl_Ende.setHorizontalGroup(
			gl_Ende.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_Ende.createSequentialGroup()
					.addGroup(gl_Ende.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_Ende.createSequentialGroup()
							.addGap(87)
							.addComponent(picEnde))
						.addGroup(gl_Ende.createSequentialGroup()
							.addGap(222)
							.addComponent(gameover))
						.addGroup(gl_Ende.createSequentialGroup()
							.addGap(337)
							.addComponent(btnNeustart)))
					.addContainerGap(87, Short.MAX_VALUE))
		);
		gl_Ende.setVerticalGroup(
			gl_Ende.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_Ende.createSequentialGroup()
					.addGap(27)
					.addComponent(picEnde)
					.addPreferredGap(ComponentPlacement.RELATED, 31, Short.MAX_VALUE)
					.addComponent(gameover)
					.addGap(16)
					.addComponent(btnNeustart)
					.addContainerGap())
		);
		Ende.setLayout(gl_Ende);
		
	// Startbutton
		
		[B][I]JButton btn2Start = new JButton("SPIEL STARTEN");
		btn2Start.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				start = true;
				Home.setVisible(false);
				Anleitung.setVisible(false);
				Game.setVisible(true);
			}
		});
		System.out.println(start);
		
		if(start == true) {
			
			for(int x=0;x<9;x++){
				switch(randomZahl[x]){
				
				case "0":
					panelAnzeige.add(lblSchere, "name_45243146397439");
					continue;
				
				case "1":
					panelAnzeige.add(lblStein, "name_45514248576573");
					continue;
					
				case "2":
					panelAnzeige.add(lblPapier, "name_45592279956646");
					continue;
					
				case "3":
					panelAnzeige.add(lblEchse, "name_45662879437764");
					continue;
					
				case "4":
					panelAnzeige.add(lblSpock, "name_45709799146917");
					continue;
					
						
				}
			}
			}[/I][/B]
		
		
		
		btn2Start.setIcon(new ImageIcon(theGame.class.getResource("/Icons/inward-black-logoff.png")));
		btn2Start.setToolTipText("");
		btn2Start.setHorizontalAlignment(SwingConstants.LEFT);
		btn2Start.setForeground(Color.BLACK);
		btn2Start.setFont(new Font("Impact", Font.PLAIN, 22));
		btn2Start.setBackground(new Color(65, 105, 225));
		
		JScrollPane scrollPane = new JScrollPane();
		
		JLabel lblAnleitung = new JLabel("ANLEITUNG");
		lblAnleitung.setFont(new Font("Impact", Font.PLAIN, 60));
		lblAnleitung.setForeground(new Color(255, 255, 255));
		lblAnleitung.setBackground(new Color(0, 0, 0));
		GroupLayout gl_Anleitung = new GroupLayout(Anleitung);
		gl_Anleitung.setHorizontalGroup(
			gl_Anleitung.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_Anleitung.createSequentialGroup()
					.addGroup(gl_Anleitung.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_Anleitung.createSequentialGroup()
							.addGap(271)
							.addComponent(lblAnleitung))
						.addGroup(gl_Anleitung.createSequentialGroup()
							.addGap(111)
							.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 572, GroupLayout.PREFERRED_SIZE))
						.addGroup(gl_Anleitung.createSequentialGroup()
							.addGap(274)
							.addComponent(btn2Start, GroupLayout.PREFERRED_SIZE, 246, GroupLayout.PREFERRED_SIZE)))
					.addContainerGap(111, Short.MAX_VALUE))
		);
		gl_Anleitung.setVerticalGroup(
			gl_Anleitung.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_Anleitung.createSequentialGroup()
					.addGap(30)
					.addComponent(lblAnleitung)
					.addGap(18)
					.addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 421, Short.MAX_VALUE)
					.addGap(18)
					.addComponent(btn2Start)
					.addGap(41))
		);
		
		JTextArea scrollAnleitung = new JTextArea();
		scrollAnleitung.setColumns(20);
		scrollAnleitung.setRows(10);
		scrollAnleitung.setTabSize(1);
		scrollAnleitung.setEditable(false);
		scrollAnleitung.setWrapStyleWord(true);
		scrollAnleitung.setLineWrap(true);
		scrollAnleitung.setForeground(new Color(255, 255, 255));
		scrollAnleitung.setBackground(new Color(0, 0, 0));
		scrollAnleitung.setFont(new Font("Monospaced", Font.BOLD, 15));
		scrollAnleitung.setText("Schere-Stein-Papier-Echse-Spock ist eine Adaption vom allseits bekannten Schere-Stein-Papier. Das Spiel wurde f\u00FCr die Einzelspielerversion leicht abgewandelt, um den Spielspa\u00DF zu erh\u00F6hen.\r\n\r\nSpielregeln:\r\nAuf dem Monitor werden schnell aufeinander folgend Bilder der Wahlm\u00F6glichkeiten\r\n( Schere, Stein, Papier, Echse, Spock ) dargestellt, jedes davon bis auf eine Ausnahme zweimal, insgesamt also neun Bilder.\r\nDas Bild welches nur einmal gezeigt wurde entspricht dem Zug des \u201EGegners\u201C und muss innerhalb von drei Sekunden gekontert werden um zu gewinnen.\r\n\r\nDie Wahlm\u00F6glichkeiten:\r\n\r\nSchere:\r\n\uF0D8 \u2026zerschneidet Papier\r\n\uF0D8 \u2026enthauptet Echse\r\n\uF076 \u2026wird von Stein zerbrochen\r\n\uF076 \u2026wird von Spock zerst\u00F6rt\r\n\r\nStein:\r\n\uF0D8 \u2026zerbricht Schwere\r\n\uF0D8 \u2026zermalmt Echse\r\n\uF076 \u2026wird von Papier umwickelt\r\n\uF076 \u2026wird von Spock verdampft\r\n\r\nPapier:\r\n\uF0D8 \u2026umwickelt Stein\r\n\uF0D8 \u2026widerlegt Spock\r\n\uF076 \u2026wird von Echse gefressen\r\n\uF076 \u2026wird von Schere zerschnitten\r\n\r\nEchse:\r\n\uF0D8 ...frisst Papier\r\n\uF0D8 \u2026vergiftet Spock\r\n\uF076 \u2026wird von Schere enthauptet\r\n\uF076 \u2026wird von Stein zermalmt\r\n\r\nSpock:\r\n\uF0D8 \u2026verdampt Stein\r\n\uF0D8 \u2026zerst\u00F6rt Schere\r\n\uF076 \u2026wird von Papier widerlegt\r\n\uF076 \u2026wird von Echse vergiftet");
		scrollPane.setViewportView(scrollAnleitung);
		Anleitung.setLayout(gl_Anleitung);
		
		
		
	}
	private class SwingAction extends AbstractAction {
		public SwingAction() {
			putValue(NAME, "SwingAction");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
		}
	}
	private class SwingAction_1 extends AbstractAction {
		public SwingAction_1() {
			putValue(NAME, "SwingAction_1");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
		}
	}
}

Und hier nur noch um alles zu zeigen die Klasse, welche die Randomzahlen ausgibt welche von 0-4 jeweils für 1 Panel stehen.

Code:
package Main;
import java.util.*;

public class Randomizer {
	String uebergabe;
	public String random(String randomZahl[]){
	   
      
      double zahlRem = Math.random();
      int zahlRemint = (int) (zahlRem * 10);
      //System.out.println(zahlRemint);  
      Collections.shuffle(Arrays.asList(randomZahl));
     for (int i = 0; i < randomZahl.length; i++) {
		if(i != zahlRemint){
			//System.out.println(randomZahl[i]);
		}
	}   
     uebergabe = randomZahl[zahlRemint];
     return uebergabe;
   }
	}


Als Anhang noch die .jar datei ( einfach theGame.rar in *.jar umbenennen ) damit ihr falls nötig mal ein Bild von dem ganzen habt.
Wäre euch sehr sehr dankbar wenn ihr mir irgendwie helfen könntet.

Danke

Simon
 

Anhänge

  • theGame.rar
    121,8 KB · Aufrufe: 240
Ohne jetzt den ganzen Code ausführlich gelesen zu haben (hab ich gerade nicht viel Zeit zu), würde ich spontan sagen, dass es sich so anhört, als würdest du dein JFrame beim Adden des jeweiligen Panels nicht repainten.
 
Danke, habe vorher noch nie was von repaint() o. revalidate() gehört aber habs mir mal angeschaut.
Habe jetzt gerade ein anderes Problem und wollte zusätzlich noch fragen ob das so mit dem repaint() stimmt.

Habe mal für die ganzen Label eine extra Klasse erstellt, mit einer Methode welche vom Button aufgerufen wird und dann eigentlich im jeweiligen "case" das Panel/Label erstellen soll.
Und damit das ganze nicht zu schnell durchläuft sind noch "Thread.sleep();" dazwischen.
Leider machen genau diese mir gerade Probleme.
Wenn ich auf Start klicke hängt sich alles für die eingetragene Zeit x 9 ( 9 Label sollen ja angezeigt werden ) auf.
Also z.B. bei Thread.sleep(1000); hängt sich das Game 9sec auf was ja darauf schließen lässt, dass im Hintergrund die switch-Anweisung schon korrekt durchgearbeitet wird.

Hier mal der Code :

Code:
JButton btn2Start = new JButton("SPIEL STARTEN");
		btn2Start.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Labels lbl1 = new Labels();
				start = true;
				Home.setVisible(false);
				Anleitung.setVisible(false);
				Game.setVisible(true);
				System.out.println(start);
				lbl1.labelAufruf();
			}
		});

Code:
package Main;

import java.awt.Color;
import java.awt.Font;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class Labels {
	
	public void labelAufruf (){
		System.out.println("geht");
		JPanel panelAnzeige = new JPanel();
		Randomizer rnd = new Randomizer();
		String[] randomZahl={"0","0","1","1","2","2","3","3","4","4"};
		rnd.random(randomZahl);
		
		
		
		
		for(int x=0;x<9;x++){
			switch(randomZahl[x]){
			
			case "0":
				JLabel lblEchse = new JLabel("ECHSE");
				lblEchse.setHorizontalAlignment(SwingConstants.CENTER);
				lblEchse.setFont(new Font("Impact", Font.PLAIN, 80));
				lblEchse.setForeground(new Color(255, 255, 255));
				panelAnzeige.add(lblEchse, "name_45662879437764");
				panelAnzeige.repaint();
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				continue;
			
			case "1":
				JLabel lblPapier = new JLabel("PAPIER");
				lblPapier.setFont(new Font("Impact", Font.PLAIN, 80));
				lblPapier.setForeground(new Color(255, 255, 255));
				lblPapier.setHorizontalAlignment(SwingConstants.CENTER);
				panelAnzeige.add(lblPapier, "name_45592279956646");
				panelAnzeige.repaint();
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				continue;
				
			case "2":
				JLabel lblStein = new JLabel("STEIN");
				lblStein.setHorizontalAlignment(SwingConstants.CENTER);
				lblStein.setFont(new Font("Impact", Font.PLAIN, 80));
				lblStein.setForeground(new Color(255, 255, 255));
				panelAnzeige.add(lblStein, "name_45514248576573");
				panelAnzeige.repaint();
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				continue;
				
			case "3":
				JLabel lblSchere = new JLabel("SCHERE");
				lblSchere.setBackground(new Color(0, 0, 0));
				lblSchere.setForeground(new Color(255, 255, 255));
				lblSchere.setFont(new Font("Impact", Font.PLAIN, 80));
				lblSchere.setHorizontalAlignment(SwingConstants.CENTER);
				panelAnzeige.add(lblSchere, "name_45243146397439");
				panelAnzeige.repaint();
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				continue;
				
			case "4":
				JLabel lblSpock = new JLabel("SPOCK");
				lblSpock.setFont(new Font("Impact", Font.PLAIN, 80));
				lblSpock.setForeground(new Color(255, 255, 255));
				lblSpock.setHorizontalAlignment(SwingConstants.CENTER);
				panelAnzeige.add(lblSpock, "name_45709799146917");
				panelAnzeige.repaint();
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				continue;
				
					
			}
		}
	}

}

Danke.
 
Zuletzt bearbeitet:
Da sind ein paar seltsame Konstrukte drin.
Deine Klasse Labels macht so keinen Sinn. Da ist zwar Logik drin aber das panelAnzeige, dass du da änderst hast du doch vorher zu keinem GUI-Element hinzugefügt. Klar, dass du nichts siehst.
Besser wäre es, die Klasse Labels von JPanel erben zu lassen und dieses dann in deine Haupt-GUI hinzuzufügen.
Außerdem fügst du immer nur Labels hinzu, nimmst aber keine Weg. Und nimm anstatt repaint() revalidate().

Dass das Programm kurz stoppt ist klar, weil du mit Thread.sleep() den Dispatcher-Thread blockierst. Dieser ist (u.a.) für das Zeichnen der GUI zuständig. Ich denke aber nicht, dass hier mit Multithreading anfangen musst. Wenn du nur wissen willst, ob der Code eine bestimmte Stelle erreicht, nimm entweder System.out.print() oder den Debugger.

Warum wird die Schleife eigentlich 8 mal durchlaufen? Und warum stehen in randomZahl Strings anstatt, ich weiß nicht, Zahlen?
 
Danke für die Hilfe, wir haben es inzwischen aufgegeben das ganze in eine extra Klasse zu packen, da es keinen Sinn macht die GUI zu zerpflücken, es entstehen einfach immer mehr Probleme.
Ich glaube wir sind auf einem guten weg allerdings gibt es noch ein Problem....

Hier mal zum Verständnis der Code :

Code:
package Main;

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Container;

import javax.swing.GroupLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JFrame;

public class Labels extends Thread {
	
	public void run(){
		
		lblSwitch();
	}
		
		
		public void lblSwitch(){
		System.out.println("geht");
		Randomizer rnd = new Randomizer();
		String[] randomZahl={"0","0","1","1","2","2","3","3","4","4"};
		rnd.random(randomZahl);
		String returnlbl;
		
		
		
		
		
		for(int x=0;x<9;x++){
			returnlbl = randomZahl[x];
			System.out.println(returnlbl);
			
			try {
				sleep(2000);
			} catch (InterruptedException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
	}
}

Ich gehe mal davon aus, dass es sich hierbei wie bereits vorher mal angesprochen um Multithreading handelt, ich habe eben in der Klasse einen neuen Thread gemacht um den Ablauf mit sleep stoppen zu können ohne das ganze Game zu stoppen.
Hier werden eben 9 Zufallszahlen generiert bzw. Zahlen von 0-4 jeweils bis auf eine Ausnahme 2 mal in zufälliger Reihenfolge.
Das ist auch die Erklärung, wieso das ganze mehrfach durchlaufen muss.
Wir haben 5 Labels...Schere, Stein, Papier, Echse, Spock diese sollen schnell hintereinander eingeblendet werden, eben wie gesagt jedes bis auf eins genau 2 mal.
Und das, was nur 1mal vorgekommen ist muss der Spieler dann innerhalb von 3 Sekunden nach dem durchlauf auswählen.
Okay, in dem Code oben habe ich zuerst public void run(); genutzt, da wir die Strings aber um die Labels anzuzeigen an das Mainprogramm weitergeben müssen brauch ich ein return(); was bei der run(); Methode ja nicht möglich ist.

Kurz noch wegen der Frage warum wir Strings und keine Ints benutzen, da wir das Array mischen lassen damit die Zahlen durcheinander sind, haben wir uns fürs shuffeln entschieden, welches allerdings nur mit einer List möglich ist und anscheinend ist es nur möglich ein String-Array in eine Liste zu ändern.

Mit dem hier :
Code:
Collections.shuffle(Arrays.asList(randomZahl));

Okay was jetzt das Problem ist...
Mit dem Code oben wird alle 2 Sekunden ein String ausgelesen und in returnlbl gespeichert, zur kontrolle habe ich das ja noch System.out.println(returnlbl);
Das funktioniert so auch, allerdings will ich diese Ausgabe jetzt an das Mainprogramm weiterleiten um somit mit hilfe einer Switch-Anweisung das entsprechende Label zu zeigen.
Also z.B. return returnlbl;.
Allerdings würde dieses ja nur den letzten Wert zurück geben, nachdem die for-Schleife abgelaufen ist.
Meine Frage jetzt, gibt es eine Möglichkeit den den Returnwert immer bei einer Änderung zurück zu geben ?
Hatte schon versucht return in einer Switch-Anweisung zu packen, leider nicht geglückt, hoffe ich bin auf dem richtigen weg und es lässt sich eine Lösung finden.

Danke euch.

lg Simon
 
Für diese Art Spiel brauchst du tatsächlich Multithreading. Bevor dir Java eine Exception an den Kopf knallt, ließ dir erst mal Concurrency in Swing durch.

Dass du in dem run() kein return nutzen kannst ist klar, denn sonst wäre der Thread zu ende. Du brauchst deshalb eine Referenz auf deine Haupt-GUI auf der du eine Methode à la setLabel(myLabel) aufrufen kannst (Für diese Referenz rauchst du Wissen über Konstruktoren(-Überladung) oder Getter und Setter).

Dass shuffle nur mit Strings funktioniert ist Quatsch, es funktioniert mit allen Objekten. Das Objekt-Äquivalent von int nennt sich Integer. Mal von Java ist auch eine Insel (<- nächste Lektüre Empfehlung) geklaut:
Code:
Integer[] ints = { 1, 2, 1, 2, 3 };
List<Integer> intList = Arrays.asList( ints );
System.out.println( Collections.frequency( intList, 1 ));
 
Zurück
Oben