Archief - [PROG]-[java] menu probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

schop aars

Legacy Member
als ik op file klik of (alft+f druk)dan komt mijn menu tevoorschijn maar het probleem is dat het achter mijn afbeeldingen staat.
als je echter met uw muis op het menu gaat staan dan word het zichtbaar.

source files:
http://users.pandora.be/cautie/SimonSays.rar

kan ik er niet voor zorgen dat mijn menu direct zichtbaar is.
btw ik ben er me van bewust dat het nog niks doet want ik moet er de game code nog insteken.

killgore

Legacy Member
bij mij staat het altijd voor uw afbeeldingen, enige probleem dak mer is da ge vaak repaint vergeet aan te roepen

schop aars

Legacy Member
mss dat bij mij da menuken derachter staat omdannek nog een oude versie van java heb.


enige probleem dak mer is da ge vaak repaint vergeet aan te roepen
waarom zoune kik repaint moeten aanroepen??
der zit nog geen gamecode in he.
ik moen toch alleen repaint aanroepen als er iets moet veranderen aan tgeen dat er al staat en da gaat gebeuren in de gamecode.

btw ik zoek ook nog een manier om mijn images te preloaden want als ik daar iets in moet veranderen dan gaat da wss anders nie zo deftig zijn.

killgore

Legacy Member
als ge u menu hebt opgeroepen en ik laat action gebeuren dan repaint hij men venster inhoud niet en blijft er grijze shade van het file-menu staan. Ik moest dit expliciet toevoegen (nu ja, ken nie veel van swing, vooral gebaseerd op kennis van c++ api's dak da gedaan heb :p).

.Acku.

Legacy Member
Uw probleem zit hier:

Code:
public void paint(Graphics g)
{
	super.paint(g);			
	image1.paintIcon(this, g, 0, 55);
              ....
	image10.paintIcon(this, g, 298, 319);
}

Je overschrijft de paint methode van JFrame, die o.a. de menubar tekent en hertekent wanneer er wordt op geklikt of iets wordt geselecteerd.
Dat werkt redelijk omdat je doet super.paint(g), waardoor je de methode alsnog oproept, maar daarna overschrijf je wat er getekend wordt met uw eigen images.
Maw: super.paint(g) tekent de menu correct maar wordt overtekent door uw image.paintIcon paints. Dat het door te selecteren wel werkt ligt aan de interne werking, er worden andere paints opgeroepen.

Wat ge doet is gewoon vrij fout: je moet uw game in een aparte component plaatsen en die dan aan de frame toevoegen. Een JPanel component bvb en daar uw paint overriden. Dan uw JPanel adden aan uw frame.

schop aars

Legacy Member
kheb een beetje "geprobeerd" te doen wat gij zei mor nu macheert het grat niemer.
btw khed de source code dan ook geupdate
(zelfde link)

kdenk da'k begijp wat ge wilt zeggen mor kweet nie just wat ik fout doe.

.Acku.

Legacy Member
Ziet er nochtans vrij goed uit, alhoewel ge die Container referentie niet nodig hebt. getContentPane().add(Component) is voldoende.
Probeer eens BorderLayout ipv FlowLayout() en ook eens paint(Graphics) te overriden ipv paintComponent(Graphics).

Kan hier niet zien, geen Java op deze PC.

ps: uw constructor van GameField is foutief; void moet weg, en repaint() daar callen heeft weinig zin want dat kan pas nadat hij geconstrueerd is.

schop aars

Legacy Member
kzallet morgen is proberen nu wa laat he.

mja die repaint was ook maar om te proberen ofdat het daarmee wel werkte want ik had em er eerst niet bij gezet.

khoop dat het dan macheert dat ik eigenlijk is aan de gamecode zelf kan beginnen denken

schop aars

Legacy Member
k twerkt nu maar kmoest ook nog dieje setPreferredSize() gebruiken.

.Acku.

Legacy Member
hmmpf, ge hebt gelijk, de Panel resized naar de componenten die erin zitten, en painted elementen zijn geen componenten, maw het denkt dat het leeg is.

schop aars

Legacy Member
het enigste dannek nu nog moet weten is hoe ge kunt controleren wanneer ik op die knopkes heb geklikt.
(khad beter vierkante knopkes gepakt dan was da simpel geweest:doh: )

schop aars

Legacy Member
code updated (zelfde link)
nog een probleemke
hij geeft een nullpointerexception maar der zit wel degelijk een waarde in.
(kheb da ook laten uitvoeren naar console dat er een waarde in zit)

.Acku.

Legacy Member
Debugger werkt niet moimenteel maar dit is zeker fout:

Code:
class GameStatus extends Thread
{
	private GameField gf;
	private Game spel = new Game(gf, this);
	public GameStatus(GameField gfield)
	{
		gf = gfield;
	}
	public void run()
	{
		
		spel.start();
	}
Je maakt een Game object met een GameField object dat op dat moment nog NULL is. Later maak je dat wel goed maar dat verandert enkel de interne 'gf' referentie, niet die van 'spel'.
Maw:
Code:
class GameStatus extends Thread
{
	private Game spel;
	
	public GameStatus(GameField gfield)
	{
		spel = new Game(gfield, this);
	}
	public void run()
	{
		
		spel.start();
	}
	public void pauzeer(int milis)
	{
		
		spel.stop();
		new Reminder(milis, spel);
	}
	
}

jammer genoeg schort er nog wat meer aan je spel, onder andere het gebruik van Thread.stop, wat al jaren verboden is (deprecated).
Je zou een ingewikkelder systeem van waits en notify moeten gebruiken, nuja, je kan het ook vermijden door de thread uit zijn lus te laten lopen en opnieuw op te starten wanneer nodig, of Timers te gebruiken.

schop aars

Legacy Member
gij weet daar precies nog veel van he:)
mja tzal dus blijkbaar moeilijker zijn dan da'k dacht.
kzal der mij dus nog is mee bezig moeten houden.

.Acku.

Legacy Member
Niet opgeven ;)
Het eerste wat je eigenlijk zou moeten doen is een klein onwerp maken: teken uw GUI en defineer de objecten die je ga nodig hebben (klassediagram), breng die in een schema. Dat is echt het minimum om ietwat een design te hebben, anders loop je verloren in code zoals nu:
- waarom zijn er twee threads, waar de ene de andere gewoon opstart?
- hoe werkt pauze als het een timed task is
- waarom is er een Game object en een GameField, maar kent Game gamefield niet, terwijl ze wel dezelfde naam dragen etc

schop aars

Legacy Member
code updated (zelfde link)
probleemke met KeyEvents in klasse game.(denk ik)
kheb geen goesting om altijd nen anderen thread te maken per probleem want anders gaat da hier rap volstaan me threads van mij

schop aars

Legacy Member
code updated (zelfde link)
k probleem opgelost maar nu zit ik met een ander probleem
ik druk op de goeie knop en programma zegt foute invoer.
er is dus iets mis met mijn if structuur maar ik zie de fout der nie in.

.Acku.

Legacy Member
if(input=="d") {}

gebruik if (input.equals("d")) {}

== vergelijkt geheugen adressen van objecten, niet values (en Strings zijn objecten)

schop aars

Legacy Member
ik ga u in de credits vermelden;)

btw welken debugger gebruikt gij?

OzMo

Legacy Member
gebruik best Netbeans voor java te coden, da bespaart u veel domme bugs waar ge over kijkt en heeft heel goeie GUI editor. Beetje zoals in Visual Studio .NET voor C#
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan