Ultimately the problem is that you've overwritten the actualWord with that of the guessed word after the first guess action.
Within actionPerformed, you want to split it up logically into what its source is first. So branch for each statement available. You currently have a check for guess and restart, but not for initialize (the okay button). So all the work the okay button would be doing executes every time an event handle is passed to the actionPerformed. This has an assignment of
actualWord = wordField.getText();, so after your first guess you then end up with the actualWord being that of the replaced first guess (so if my word is test and I guess 't', than I'd have actualWord being t**t). Group all that logic into the okay branch.
You'll need to fix up the incorrect guesses as well. Currently you check within the loop during char iteration, so if I guessed 't' on 'test', than I'd still end up with 2 incorrect guesses (the e and the s). You may want to implement case insensitive compare as well. The error count can be easily fixed by adding a boolean within the iteration loop. So long as it matches one result you have bMatches=true, and after the loop check for !bMatches and then increment the incorrect count.
Looks good otherwise. It's missing error handling, but I won't suggest adding it unless you have learned that. You'll also want to implement some type of functionality in the guess that allows you to indicate that the word is fully guessed and relay that to the user.
header('HTTP/1.1 420 Enhance Your Calm');