Canvas in Frame einfügen. Problem mit 4-Gewinnt

Zasa

Neues Mitglied
Hallo,
ich programmiere zum ersten mal Java in Verbindung mit Awt und swing. Nun bin ich dabei, mir ein kleines Vier gewinnt Spiel zu schreiben und scheitere daran das Canvas, welches das Spielfeld darstellt in die gleiche Frame einzubinden, die die Buttons enthält, mit denen man Coins einwirft.
Ich habe zwei Klassen:
1. SpielFeld Hier ist die meiste Spiellogik und das Frame enthalten
(ja ich weiß das ich das noch viel sauberer und kürzer hätte gestalten können)
2. Modell extends Canvas Hier ist nur das Canvas

Hier mal ein Screenshot vom frame8fce93eda6.png

Zum coden verwende ich Eclipse

Java:
public class SpielFeld  
{
	
	static JFrame frame = new JFrame("Vier Gewinnt");
	int feld[][] = new int[6][7];
	final int Leer = 0;
	final int Blau = 1;
	final int Gelb = -1;
	
	private boolean BlauAmZug;
	
	private int zeiger0 = 5;	// 1 reihe voll?
	private int zeiger1 = 5;	// 2 etc.
	private int zeiger2 = 5;	// 3 ..
	private int zeiger3 = 5;	// 4
	private int zeiger4 = 5;	// 5
	private int zeiger5 = 5;	// 6
	private int zeiger6 = 5; 	// 7
	
	
	/*
	 * Konstruktor der Klasse SpielFeld.
	 * Erzeugt die sieben JButtons die nacher zum einwerfen von Coins dienen.
	 * Weißt jedem JButton mittels einer inneren anonymen Klasse eine Aufgabe zu, 
	 * die sobald der Button gedrückt wurde abgearbeitet werden soll.
	 * 
	 */	
	public SpielFeld()
	{
		
		
		  JButton testbutton = new JButton("Testbutton");
		  testbutton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				arrayausgeben();
				
				
			}
		});
  
		  
		  JButton button1 = new JButton("Wirf in 1");	  
		  JButton button2 = new JButton("Wirf in 2");	  	  
		  JButton button3 = new JButton("Wirf in 3");	 	  
		  JButton button4 = new JButton("Wirf in 4");	  	  
		  JButton button5 = new JButton("Wirf in 5");	  	  
		  JButton button6 = new JButton("Wirf in 6");	  	  
		  JButton button7 = new JButton("Wirf in 7");
	
		  
		  button1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Button 1 gedrückt");
				if (zeiger0>=0 && BlauAmZug)
				{
					feld[zeiger0][0] = Blau;
					zeiger0--;
					BlauAmZug = false;
					siegertest();
				}
				else if (zeiger0>=0 && !BlauAmZug)
				{ 
					feld[zeiger0][0] = Gelb;
					zeiger0--;
					BlauAmZug = true;
					siegertest();
				}
				else 
				{
					System.out.println("Diese Reihe ist voll");
				}
							
			}
		});
		  
		  button2.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Button 2 gedrückt");
				if (zeiger1>=0 && BlauAmZug)
				{
					feld[zeiger1][1] = Blau;
					zeiger1--;
					BlauAmZug = false;
					siegertest();
				}
				else if (zeiger1>=0 && !BlauAmZug)
				{ 
					feld[zeiger1][1] = Gelb;
					zeiger1--;
					BlauAmZug = true;
					siegertest();
				}
				else 
				{
					System.out.println("Diese Reihe ist voll");
				}
				
			}
		});
		  
		  button3.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Button 3 gedrückt");
				if (zeiger2>=0 && BlauAmZug)
				{
					feld[zeiger2][2] = Blau;
					zeiger2--;
					BlauAmZug = false;
					siegertest();
				}
				else if (zeiger2>=0 && !BlauAmZug)
				{ 
					feld[zeiger2][2] = Gelb;
					zeiger2--;
					BlauAmZug = true;
					siegertest();
				}
				else 
				{
					System.out.println("Diese Reihe ist voll");
				}
			}
		});
		  
		  button4.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Button 4 gedrückt");
				if (zeiger3>=0 && BlauAmZug)
				{
					feld[zeiger3][3] = Blau;
					zeiger3--;
					BlauAmZug = false;
					siegertest();
				}
				else if (zeiger3>=0 && !BlauAmZug)
				{ 
					feld[zeiger3][3] = Gelb;
					zeiger3--;
					BlauAmZug = true;
					siegertest();
				}
				else 
				{
					System.out.println("Diese Reihe ist voll");
				}
				
			}
		});
		  
		  button5.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Button 5 gedrückt");
				if (zeiger4>=0 && BlauAmZug)
				{
					feld[zeiger4][4] = Blau;
					zeiger4--;
					BlauAmZug = false;
					siegertest();
				}
				else if (zeiger4>=0 && !BlauAmZug)
				{ 
					feld[zeiger4][4] = Gelb;
					zeiger4--;
					BlauAmZug = true;
					siegertest();
				}
				else 
				{
					System.out.println("Diese Reihe ist voll");
				}
				
			}
		});
		  
		  button6.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Button 6 gedrückt");
				if (zeiger5>=0 && BlauAmZug)
				{
					feld[zeiger5][5] = Blau;
					zeiger5--;
					BlauAmZug = false;
					siegertest();
				}
				else if (zeiger5>=0 && !BlauAmZug)
				{ 
					feld[zeiger5][5] = Gelb;
					zeiger5--;
					BlauAmZug = true;
					siegertest();
				}
				else 
				{
					System.out.println("Diese Reihe ist voll");
				}
				
			}
		});
		  
		  button7.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Button 7 gedrückt");
				if (zeiger6>=0 && BlauAmZug)
				{
					feld[zeiger6][6] = Blau;
					zeiger6--;
					BlauAmZug = false;
					siegertest();
				}
				else if (zeiger6>=0 && !BlauAmZug)
				{ 
					feld[zeiger6][6] = Gelb;
					zeiger6--;
					BlauAmZug = true;
					siegertest();
				}
				else 
				{
					System.out.println("Diese Reihe ist voll");
				}
				
				
			}
		});
		  

		
		  
		  
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
		
		FlowLayout flowlayout = new FlowLayout(); 
		frame.setLayout(flowlayout);
		
		frame.setSize(new Dimension(800, 700));
		
		//frame.getContentPane().add(testbutton);
		frame.getContentPane().add(button1);
		frame.getContentPane().add(button2);
		frame.getContentPane().add(button3);
		frame.getContentPane().add(button4);
		frame.getContentPane().add(button5);
		frame.getContentPane().add(button6);
		frame.getContentPane().add(button7);
		frame.setVisible(true);
		Modell myModell = new Modell();

	    frame.getContentPane().add(myModell);
		 
		
	    
	  }
Java:
public class Modell extends Canvas {

	public Modell()
	{
	
	}

	
	public void paint(Graphics g) 
	{
		
		Graphics2D g2D ;
		g2D = (Graphics2D) g;
  
		g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		String fileName = "a.jpg";
		Image img = getToolkit().getImage(fileName);
		AffineTransform aTran = new AffineTransform();
		aTran.translate(50.0f, 20.0f);
		g2D.transform(aTran);

		g2D.drawImage(img, new AffineTransform(), this);

		g2D.setColor(Color.black);
		g2D.drawRect(1, 1, 700, 600);				// Spielfeldrahmen
		for (int i = 100; i <=700; i = i+100) {
	
			g2D.drawLine(1, i, 700, i);				//horizontalen Linien
	
		}	
		for (int i = 0; i <= 600; i = i+100) {
	  										
			g2D.drawLine(i, 1, i, 600);				//vertikalen Linien

		}
 
		for (int i = 0; i <=600; i=i+100) {
			g2D.setColor(Color.red);
			g2D.drawOval(i, 500, 100, 100);		//coins malen
			g2D.drawOval(i, 400, 100, 100);
			g2D.drawOval(i, 300, 100, 100);
			g2D.drawOval(i, 200, 100, 100);
			g2D.drawOval(i, 100, 100, 100);
			g2D.drawOval(i, 0, 100, 100);
			g2D.setColor(Color.white);			//ausfuellfarbe der coins
			g2D.fillOval(i, 500, 100, 100);
			g2D.fillOval(i, 400, 100, 100);
			g2D.fillOval(i, 300, 100, 100);
			g2D.fillOval(i, 200, 100, 100);
			g2D.fillOval(i, 100, 100, 100);
			g2D.fillOval(i, 0, 100, 100);
	}




	}

}
 
Zuletzt bearbeitet:

Zasa

Neues Mitglied
Bin selbst draufgekommen.
Habe wohl vergessen die verschiedenen Layouts zu beachten.
Mein Canvas war drinn, aber nicht sichtbar. Hier der verbesserte Code und ein Bildchen
c7b42d02b2.png

Java:
FlowLayout flowlayout = new FlowLayout(1,19,5);		
		BorderLayout borderlayout = new BorderLayout(); 
		frame.setLayout(borderlayout);		
		frame.setSize(new Dimension(800, 700));
		JPanel panel = new JPanel();
		panel.setLayout(flowlayout);
		//panel.add(testbutton);
		panel.add(button1);
		panel.add(button2);
		panel.add(button3);
		panel.add(button4);
		panel.add(button5);
		panel.add(button6);
		panel.add(button7);
		frame.add(panel,BorderLayout.NORTH);
		
		frame.add(Modell.getModell(),BorderLayout.CENTER);
		frame.setResizable(false);
		frame.setVisible(true);
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
K 3D-Grafik Canvas ist ein eigener Frame?! AWT, Swing, JavaFX & SWT 13
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H JavaFX Gedrehter Text auf Canvas (Positionierung) AWT, Swing, JavaFX & SWT 6
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
W Clear Canvas und anschließendes neues Erstellen von Objekten auf Canvas aus ArrayList AWT, Swing, JavaFX & SWT 4
W Canvas oder Polygone? AWT, Swing, JavaFX & SWT 3
Monokuma Canvas Form entfernen AWT, Swing, JavaFX & SWT 2
Monokuma KeyEvent in der Canvas Klasse AWT, Swing, JavaFX & SWT 0
M Internal Frames und Canvas-Element AWT, Swing, JavaFX & SWT 9
TheJavaKid Auf eine Zeichnung im Canvas reagieren AWT, Swing, JavaFX & SWT 13
M Halbkreiszeichnen(Canvas) - Diesen mit Mouseevents bestücken AWT, Swing, JavaFX & SWT 3
dereki2000 AWT Canvas zeichnet nicht AWT, Swing, JavaFX & SWT 7
D Canvas oder scene graph? AWT, Swing, JavaFX & SWT 16
J Canvas wird nicht angezeigt AWT, Swing, JavaFX & SWT 10
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
Prafy AWT Klickbare Bereiche auf Canvas AWT, Swing, JavaFX & SWT 2
J JavaFX JavaFX Canvas einfaches Zeichenprogramm AWT, Swing, JavaFX & SWT 7
P MalProgramm mit JScrollPane und Canvas AWT, Swing, JavaFX & SWT 2
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
L JavaFX Canvas max size? AWT, Swing, JavaFX & SWT 1
J JavaFX Rendering von Canvas sehr langsam AWT, Swing, JavaFX & SWT 2
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
Regedit JavaFX Java Canvas hört ständig auf zu aktualisieren/malen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
B JavaFX KeyEvent und Canvas draw Problem AWT, Swing, JavaFX & SWT 9
K Fragen zu JavaFx Canvas AWT, Swing, JavaFX & SWT 0
C Java FX Canvas missing getGraphicContext2D AWT, Swing, JavaFX & SWT 5
windl Overlay mit Transparentem JWindow und Canvas AWT, Swing, JavaFX & SWT 2
S JavaFX Canvas - nur eine Figur auf der Zeichenfläche färben? AWT, Swing, JavaFX & SWT 1
R JComponent auf Canvas AWT, Swing, JavaFX & SWT 8
S Canvas durch transparentes JPanel sichtbar machen AWT, Swing, JavaFX & SWT 2
A JavaFX Menubar wird von Canvas überzeichnet AWT, Swing, JavaFX & SWT 8
antonbracke Multiplayer Shooter- Wie geht das mit Canvas & Graphics AWT, Swing, JavaFX & SWT 6
Luk10 KeyBindings mit Canvas? AWT, Swing, JavaFX & SWT 3
B LookAndFeel GWT: Canvas in TabSet nicht sichtbar AWT, Swing, JavaFX & SWT 2
K canvas zeig nach repaint nichts an AWT, Swing, JavaFX & SWT 8
T Canvas clipping AWT, Swing, JavaFX & SWT 4
S 2 Canvas übereinander AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Canvas Problem(Größe) AWT, Swing, JavaFX & SWT 6
F Canvas Objekt außerhalb des Frames zeichnen AWT, Swing, JavaFX & SWT 3
M Wofür Canvas? AWT, Swing, JavaFX & SWT 5
frankred Swing Canvas nach "Window-resize" neu Zeichnen lassen wegen Anzeigefehler AWT, Swing, JavaFX & SWT 4
S Canvas in ScrollPane wird beim scrollen immer neu gezeichnet AWT, Swing, JavaFX & SWT 3
F Nur ein Objekt auf Canvas neu zeichnen AWT, Swing, JavaFX & SWT 4
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
lumo SWT Canvas transparent AWT, Swing, JavaFX & SWT 4
2 AWT Zeichnen in Canvas AWT, Swing, JavaFX & SWT 5
B 2D-Grafik Malen/übermalen mit Canvas AWT, Swing, JavaFX & SWT 5
L Dynamisch Objekte in Canvas zeichnen AWT, Swing, JavaFX & SWT 5
G Auf Canvas zeichnen nur über boolean-Abfragen? AWT, Swing, JavaFX & SWT 5
S Canvas-Inhalt in Laufzeit ändern AWT, Swing, JavaFX & SWT 6
R In JFrame oder in Canvas mit grafischen Elemente zeichnen AWT, Swing, JavaFX & SWT 2
I Canvas Repaint Probleme AWT, Swing, JavaFX & SWT 2
S Bild wird auf Canvas in Applet nicht gezeichnet AWT, Swing, JavaFX & SWT 4
G SWT Linie unter transparentes Canvas zeichnen AWT, Swing, JavaFX & SWT 4
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
S SWT Canvas: Flackernde Bilder AWT, Swing, JavaFX & SWT 3
T AWT canvas AWT, Swing, JavaFX & SWT 3
P Canvas: String wird nicht gezeichnet AWT, Swing, JavaFX & SWT 5
T SWT Canvas Koordinaten per MouseMove auslesen AWT, Swing, JavaFX & SWT 1
H Zeichnen auf smartgwt Canvas AWT, Swing, JavaFX & SWT 4
G Drag and Drop JTree to Canvas AWT, Swing, JavaFX & SWT 7
K Swing Sinuskurve zeichnen auf Canvas AWT, Swing, JavaFX & SWT 2
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
D Canvas soll angezeigtes jpg-Bild aktualisieren AWT, Swing, JavaFX & SWT 4
N zeichnen auf awt canvas AWT, Swing, JavaFX & SWT 9
G Ein Wort in einem String färben in einer Canvas AWT, Swing, JavaFX & SWT 10
J Canvas Inhalt als Bild speichern! AWT, Swing, JavaFX & SWT 16
T zeichnen mit canvas AWT, Swing, JavaFX & SWT 3
S repaint im Canvas AWT, Swing, JavaFX & SWT 3
D Canvas und Buttons AWT, Swing, JavaFX & SWT 20
P Zeichnen in Canvas und Neuzeichnen AWT, Swing, JavaFX & SWT 3
G Canvas + Swing-Objekte AWT, Swing, JavaFX & SWT 5
C canvas.draw zeichne ohne ausfüllen AWT, Swing, JavaFX & SWT 9
P Canvas in JFrame mit GridLayout AWT, Swing, JavaFX & SWT 4
B Graphics und Canvas - Problem AWT, Swing, JavaFX & SWT 2
T Canvas gegen Container austauschen --> GUI fehlt AWT, Swing, JavaFX & SWT 4
P Canvas Inhalt löschen AWT, Swing, JavaFX & SWT 4
D Canvas über JMenuBar AWT, Swing, JavaFX & SWT 7
F ToolTip auf Canvas AWT, Swing, JavaFX & SWT 2
L Probleme mit mehreren Canvas: Überlagerungseffekte? AWT, Swing, JavaFX & SWT 5
N Zu hoher Speicherverbrauch beim Zeichnen (Canvas) AWT, Swing, JavaFX & SWT 5
G Canvas im JPanel - "Freie" Fläche Problem AWT, Swing, JavaFX & SWT 10
T Textfeldwert in canvas AWT, Swing, JavaFX & SWT 4
D cannot access Canvas AWT, Swing, JavaFX & SWT 13
G Canvas in SWT aktualisieren AWT, Swing, JavaFX & SWT 21
S AUF Canvas Zeichnen Fehler! AWT, Swing, JavaFX & SWT 10
G Canvas löschen AWT, Swing, JavaFX & SWT 15
H Sowas wie ein Canvas AWT, Swing, JavaFX & SWT 3
D Inhalt einer Canvas löschen (SWT.NO_BACKGROUND gesetzt) AWT, Swing, JavaFX & SWT 3
G GridBagLayout mit Canvas-Positionsproblem AWT, Swing, JavaFX & SWT 5
J Canvas und JTextField AWT, Swing, JavaFX & SWT 2
T erkennen ob innerhalb oder außerhalb von canvas gezeichnet AWT, Swing, JavaFX & SWT 2
S Problemen mit Canvas-Objekten im GridLayout AWT, Swing, JavaFX & SWT 8
P Tranparentes Canvas AWT, Swing, JavaFX & SWT 8
P Inhalt eines Canvas verkleinern AWT, Swing, JavaFX & SWT 3
G Canvas, JMenu, und BufferStrategy AWT, Swing, JavaFX & SWT 2
M Codeteilung -> Canvas zeichnet nicht mehr AWT, Swing, JavaFX & SWT 40

Ähnliche Java Themen

Neue Themen


Oben