Poker - grundlegende frage zu paint()

Status
Nicht offen für weitere Antworten.
S

sockeqwe

Gast
Hi, ich will so ein Texas Holdem Poker über netzwerk realisieren ...
Ich habe alles als Grafiken (jpg, gif), also den Tisch, karten, spieler usw.

Ich habe aber so ein grundlegendes problem, das ich nicht ganz verstehe, wie ich das mit der public void paint funktion von JFrame realisieren soll ...

Ich Zeichne sachen bzw. Bilder mit Graphics, aber die werden dann eben nur auch auf das JFrame gezeichnet, wenn die paint funktion ausgeführt wird ...

Und da eben weiß ich nicht wie das ganze "Zeichen-Problem" anzugehen ...

Kann mir jemand erklären wie ich das so ganz grundsätzlich angehen bzw. mein Programm struckturieren sollte?

Danke jetzt schon mal!
 
S

sockeqwe

Gast
Also hab ich das ganze total falsch angefangen:
Code:
import java.awt.*;


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Fenster extends JFrame {

	public int w,h;
	public Image img_tisch;
	public JPanel video, controll;
	public JButton b_neuertisch, b_connect;
	
	
	public Fenster() {
	super("Net Poker");
	w=800;
	h=664;
	this.setSize(w,h);
	this.setVisible(true);
	
	Dimension d=this.getToolkit().getScreenSize();
	
	this.setLocation((d.width-w)/2,(d.height-h)/2);
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
	this.setLayout(new BorderLayout());
	
	Image ico=this.getToolkit().getImage("graphics/chips/5.jpg");
	this.setIconImage(ico);
	
	// Panels
	video=new JPanel();
	controll=new JPanel();
	
	controll.setLayout(new GridLayout(1,2));
	
	
	// Bilder laden
	img_tisch=this.getToolkit().getImage("tisch.jpg");
	
	// Buttons
	b_neuertisch=new JButton("Neuer Tisch");
	b_neuertisch.setBounds(200, 500, 100, 30);
	b_neuertisch.setVisible(true);
	
	b_connect = new JButton ("zu Tisch verbinden");
	b_neuertisch.setBounds(400, 500, 100, 30);
	b_neuertisch.setVisible(true);
	
	controll.add(b_neuertisch);
	controll.add(b_connect);
	
	
	
	this.add(video, BorderLayout.CENTER);
	this.add(controll, BorderLayout.SOUTH);
	
	
	
	}
	
	public void drawtisch()
	{
		//this.getGraphics().drawRect(10,50,100,100);
		video.getGraphics().drawImage(img_tisch, 0,0, video);
		
	}
	public void drawcontroll()
	{
	
	}
	
	public void realrepaint()
	{
		this.setSize(w-1, h-1);
		this.setSize(w, h);
		this.repaint();
		
		
		
	}
	public void paint(Graphics g)
	{
		drawtisch();
		
	}

	
}


Ich hab aber das Tutorial von WildCard nicht ganz verstanden ...
Wo sollte ich den da das Image laden, bzw. hab ich das Problem das unterschiedlich 1-10 Spieler am Tisch sitzen, also auch 1-10 Images geladen werden müssen und angezeigt werden sollen ...
 

Wildcard

Top Contributor
Am einfachsten in dem man JLabels verwendet:
Code:
JLabel label = new JLabel(new ImageIcon("pfad/zum/Bild.png");
Von getGraphics musst du unbedingt weg kommen, das ist der falsche Weg.
 
S

sockeqwe

Gast
ok, jetzt hab ichs mal so gemacht:
Code:
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.JComponent;


public class Video extends JComponent  {
	
	public Image img_tisch, img_spieler1, img_spieler2, img_spieler3, img_spieler4, img_spieler5, img_spieler6, img_spieler7, img_spieler8, img_spieler9, img_spieler10;
	public boolean player1, player2,player3,player4,player5,player6,player7,player8,player9,player10;
	
	public Video(Image tisch, Image p1,Image p2,Image p3,Image p4,Image p5,Image p6,Image p7,Image p8,Image p9,Image p10)
	{
		img_tisch=tisch;
		img_spieler1=p1;
		img_spieler2=p2;
		img_spieler3=p3;
		img_spieler4=p4;
		img_spieler5=p5;
		img_spieler6=p6;
		img_spieler7=p7;
		img_spieler8=p8;
		img_spieler9=p9;
		img_spieler10=p10;
		
		player1=false;
		player2=false;
		player3=false;
		player4=false;
		player5=false;
		player6=false;
		player7=false;
		player8=false;
		player9=false;
		player10=false;
		
		this.setSize(800, 443);
	}
	
	protected void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		g.drawImage(img_tisch,0,0,this);
		
		if (player1) g.drawImage(img_spieler1,0,50,this);
		if (player2) g.drawImage(img_spieler2,146,0,this);
		if (player3) g.drawImage(img_spieler3,330,0,this);
		if (player4) g.drawImage(img_spieler4,480,0,this);
		if (player5) g.drawImage(img_spieler5,650,35,this);
		if (player6) g.drawImage(img_spieler6,630,223,this);
		if (player7) g.drawImage(img_spieler7,450,330,this);
		if (player8) g.drawImage(img_spieler8,300,328,this);
		if (player9) g.drawImage(img_spieler9,150,324,this);
		if (player10) g.drawImage(img_spieler10,13,230,this);
		}
	


}
eine eigene Classe wo es meinen Tisch und die Spieler zeichnet,
einziges problem: es Braucht ziemlich lange, bis es alle gezeichnet hat, d.h. es sieht nicht so schön aus ...
erster, zeichnets die Spielerbilder, dann erst den Tisch ... sieht halt nicht so schön aus, kann man da was machen?

Was sagt ihr zu den Lösungsansatz? Gut so?
 
S

sockeqwe

Gast
Was ich jetzt aber auch nicht verstehe, ist folgendes:

Code:
import java.awt.*;


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Fenster extends JFrame {

	public int w,h;
	public Image img_tisch;
	public JPanel controll, controllbuttons, controllchat;
	public Video video;
	public JButton b_neuertisch, b_connect, b_setzen,b_checken,b_mitgehen, b_passen, b_beenden;
	
	
	public Fenster() {
	super("Net Poker");
	w=800;
	h=664;
	this.setSize(w,h);
	this.setVisible(true);
	
	Dimension d=this.getToolkit().getScreenSize();
	
	this.setLocation((d.width-w)/2,(d.height-h)/2);
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
	this.setLayout(new BorderLayout());
	
	Image ico=this.getToolkit().getImage("graphics/chips/5.jpg");
	this.setIconImage(ico);
	
	// Panel
	//video=new JPanel();
	controll=new JPanel();
	controll.setLayout(new BorderLayout());
	
	controllbuttons=new JPanel();
	controllbuttons.setLayout(new GridLayout(2,1));
	controllchat=new JPanel();
	
	
	
	// Bilder laden
	Image img1,img2,img3,img4,img5,img6,img7,img8,img9,img10;
	img_tisch=this.getToolkit().getImage("tisch.jpg");
	img1=this.getToolkit().getImage("graphics/players/player1.gif");
	img2=this.getToolkit().getImage("graphics/players/player2.gif");
	img3=this.getToolkit().getImage("graphics/players/player3.gif");
	img4=this.getToolkit().getImage("graphics/players/player4.gif");
	img5=this.getToolkit().getImage("graphics/players/player5.gif");
	img6=this.getToolkit().getImage("graphics/players/player6.gif");
	img7=this.getToolkit().getImage("graphics/players/player7.gif");
	img8=this.getToolkit().getImage("graphics/players/player8.gif");
	img9=this.getToolkit().getImage("graphics/players/player9.gif");
	img10=this.getToolkit().getImage("graphics/players/player10.gif");
	
	// Video 
	video=new Video(img_tisch,img1,img2,img3,img4,img5,img6,img7,img8,img9,img10);
	
	
	
	// Buttons
	b_neuertisch=new JButton("Neuer Tisch");
	b_neuertisch.setBounds(200, 500, 100, 30);
	b_neuertisch.setVisible(true);
	
	b_connect = new JButton ("zu Tisch verbinden");
	b_neuertisch.setBounds(400, 500, 100, 30);
	b_neuertisch.setVisible(true);
	
	controllbuttons.add(b_neuertisch);
	controllbuttons.add(b_connect);
	
	controll.add(controllbuttons, BorderLayout.CENTER);
	controll.add(controllchat, BorderLayout.EAST);
	
	
	controllbuttons.setVisible(true);
	controllchat.setVisible(true);
	controll.setVisible(true);
	
	this.add(video, BorderLayout.CENTER);
	this.add(controll, BorderLayout.SOUTH);
	
	
	
	}
	
	public void drawtisch()
	{
		//this.getGraphics().drawRect(10,50,100,100);
	//	video.getGraphics().drawImage(img_tisch, 0,0, video);
		
	}
	public void drawcontroll()
	{
	
	}
	
	public void realrepaint()
	{
		this.setSize(w-1, h-1);
		this.setSize(w, h);
		this.repaint();
		
		
		
	}
		
}

Es zeigt mir beim starten, die Grafiken also "video" an, jedoch aber nicht die Buttons, die auf dem JPanel "controll" liegen, die werden erst beim nächsten repaint (wenn ich die fenstergröße ändere) dargestellt. Warum das? Was kann ich dagegen tun?
 

Marco13

Top Contributor
Die Zeile
this.setVisible(true);
sollte die LETZTE Zeile im Konstruktor sein. (Eigentlich mus das in einem Thread erstellt werden, aber das ist i.a. nicht sooo wichtig).

Das realrepaint ist ein netter Versuch, aber sollte jetzt raus.

Die Video-Klasse ist ... nicht schön. Statt der Variablen player1, player2, ... player3412 solltest du lieber Arrays verwenden.
Code:
private static final int NUM_PLAYERS = 10;

Image images[] = new Image[NUM_PLAYERS];
for (int i=0; i<NUM_PLAYERS; i++)
{
   image[i] = this.getToolkit().getImage("graphics/players/player"+(i+1)+".gif");
}

Warum du die Bilder im Konstruktor übergibst, und nicht einfach innerhalb der Video-Klasse lädst, weiß ich grad auch nicht.
 

Wildcard

Top Contributor
Ausserdem solltest du wenn du über das Toolkit Bilder lädst auch einen MediaTracker verwenden oder auf das Toolkit verzichten und ImageIO oder ImageIcons nehmen.
 
S

sockeqwe

Gast
Danke erstmal für eure hilfe, ja das mit this.setvisible() am ende hats tatsächlich ausgemacht, muss ich mir merken! Danke.

Ja werd ich auf Array umstellen die Video Klasse.

Ich habe aber noch eine Frage zu meiner Video Klasse,
zurzeit sind ja meine Grafiken keine Objekte sondern einfach mit Graphics gezeichnet, also kann ich nicht jedes Bild einzeln mit setVisible ansprechen. Das könnte ich wenn ich JLabels (new ImagIcon()) verwende oder? Dann muss ich meine Video Klasse aber von JPanel ableiten? oder funktioniert das auch mit JComponent, also ist JComponent auch ein Kontainer?
 

Marco13

Top Contributor
Dass JComponent auch ein Container ist, kannst du in der API nachlesen. Ansonsten kannst du die einzelnen bilder ja mit den boolschen Variablen player1, player2... bzw. mit einem Array
boolean playerImageVisible[]
ein- und ausschalten. Allerdings solltest du bei Gelegenheit mal planen, wie dein Programm aussehen soll, wenn es fertig ist....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Texas Hold'em Poker als Online-Spiel mit Freunden Spiele- und Multimedia-Programmierung 5
B Deepmind Poker Bot für PokerStars konfigurieren? Spiele- und Multimedia-Programmierung 2
D Poker KI, realitätsnah? Spiele- und Multimedia-Programmierung 9
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
G [Java/KryoNet/LibGDX] Mutliplayer Packet Frage Spiele- und Multimedia-Programmierung 2
G [Java Server] Allgemeine Frage zum Thema Networking in Videospielen Spiele- und Multimedia-Programmierung 15
J Frage zum Einlesen einer .wav in ein byte Array Spiele- und Multimedia-Programmierung 3
S ImageSlider frage Spiele- und Multimedia-Programmierung 3
Anfänger2011 Minimap: Theoretische Frage zur Umsetzung Spiele- und Multimedia-Programmierung 2
Androbin Kollisions-Frage Spiele- und Multimedia-Programmierung 8
windl Frage zu Airplay und zur Mitarbeit bei einer Mediaanlage Spiele- und Multimedia-Programmierung 0
S LWJGL Kamera Frage Spiele- und Multimedia-Programmierung 2
P Frage zu einem Projekt "Einarmiger Bandit" 3 Walzen / 9 Zeichnungen BLUEJ Spiele- und Multimedia-Programmierung 10
Guybrush Threepwood Ketzerische Frage: Opus-Codec für Java Spiele- und Multimedia-Programmierung 14
CookieSoft OpenGl Translatef Frage Spiele- und Multimedia-Programmierung 2
Kenan89 Theoretische Frage zu Tile Spielkarten Spiele- und Multimedia-Programmierung 9
R Tileloader Frage Spiele- und Multimedia-Programmierung 2
S Frage: NullPointer, aber warum? Spiele- und Multimedia-Programmierung 8
J Anfänger Frage wie adden? Spiele- und Multimedia-Programmierung 9
R Frage zur Kollision Spiele- und Multimedia-Programmierung 5
M.F.G. Spielvorstellung (plus KI frage): Connect Four – Extreme Spiele- und Multimedia-Programmierung 11
Helgon OpenGL Blend Frage Spiele- und Multimedia-Programmierung 18
P Frage bzgl. TextAdventure Spiele- und Multimedia-Programmierung 11
K Frage zur 3D Entwicklung zwecks vorhandener Engines Spiele- und Multimedia-Programmierung 17
V Frage zu AffineTransforms Spiele- und Multimedia-Programmierung 2
N frage zu der mp3spi Spiele- und Multimedia-Programmierung 2
J Frage zu Threads Spiele- und Multimedia-Programmierung 5
C Frage zu Ray-Picking mit JOGL Spiele- und Multimedia-Programmierung 13
M VRML Loader(noob Frage) ^^ Spiele- und Multimedia-Programmierung 3
M Prinzipielle Frage: Kann Java Grafiken ausschneiden? Spiele- und Multimedia-Programmierung 3
R Frage zu Hütchenspielprogrammierung! Spiele- und Multimedia-Programmierung 47
V Frage zu Grafiken und Software! Spiele- und Multimedia-Programmierung 5
radiac Mal eine ganz Doofe Frage... verzeiht :) Spiele- und Multimedia-Programmierung 9
Developer_X Eine Frage zur ViewBesetzung Spiele- und Multimedia-Programmierung 28
H BlueJ Frage Spiele- und Multimedia-Programmierung 13
K Malefiz programmieren - Frage zu den einzelnen Spielfeldern Spiele- und Multimedia-Programmierung 5
G Ping Pong Frage Spiele- und Multimedia-Programmierung 17
0x7F800000 allgemeine frage zu Java 3D Spiele- und Multimedia-Programmierung 12
B Frage zur Spielsteuerung bei einem rundenbasiertes Spiel Spiele- und Multimedia-Programmierung 5
G frage zu tutorial Spiele- und Multimedia-Programmierung 3
M Frage eines Anfängers Spiele- und Multimedia-Programmierung 3
N Schiffe Versenken Frage zum Spielbrett Spiele- und Multimedia-Programmierung 24
N Generelle Frage: "GUI"-Werkzeuge Spiele- und Multimedia-Programmierung 5
X Frage zu Import von CAD Zeichnungen Spiele- und Multimedia-Programmierung 4
A kurze Frage zu Java3D! (automatische Skalierung) Spiele- und Multimedia-Programmierung 3
B Frage zum GUI-Design bei Brettspielen Spiele- und Multimedia-Programmierung 4
P Frage zum Scrolling Spiele- und Multimedia-Programmierung 23
B Frage zum Abspielen von Sounddateien Spiele- und Multimedia-Programmierung 2
J Frage zu Geometry und Shape3D Spiele- und Multimedia-Programmierung 4
J Frage zu Transform3D.mul() Spiele- und Multimedia-Programmierung 2
J Java3D: Texture-Frage Spiele- und Multimedia-Programmierung 4
C frage zu glrotated Spiele- und Multimedia-Programmierung 12
T Einsatzbereich-Frage von Java 3D Spiele- und Multimedia-Programmierung 24
S [Java2D] Performance Frage Spiele- und Multimedia-Programmierung 4
G Frage zur Sichtbarkeit von Flächen Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben