Ik heb de volgende applet:
(Staat hier online - even doorklikken naar applet)
Ik doe heel vaak lblActionResponse.setText("...(een message)...");
Dit werkt bijna altijd.
Maar in één specifiek scenario werkt het niet, dus de label wordt gewoon niet bijgewerkt in mijn browser.
Namelijk precies in dit gedeelte:
Is daar een verklaring voor? Vanuit NetBeans heb ik dit probleem niet.
(Staat hier online - even doorklikken naar applet)
Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class MastermindApplet extends javax.swing.JApplet implements ActionListener {
JTextField[] txtGuessPattern = new JTextField[MastermindBackend.maxNumberOfTurns];
JTextField[] txtGuessFeedback = new JTextField[MastermindBackend.maxNumberOfTurns];
JTextField txtCodePattern = new JTextField(MastermindBackend.lengthOfPattern);
JLabel lblActionResponse = new JLabel("Welcome",JLabel.CENTER);
JButton btnNewEngineKeyGame = new JButton("Engine key game");
JButton btnNewUserKeyGame = new JButton("User key game");
JButton btnProceedAction = new JButton(" ==> ");
JPanel pnlMain = new JPanel();
JPanel pnlCodePattern = new JPanel();
JPanel pnlGuessesResponses = new JPanel();
JPanel pnlGameControl = new JPanel();
BoxLayout lytMain = new BoxLayout(pnlMain,BoxLayout.Y_AXIS);
FlowLayout lytCodePattern = new FlowLayout(FlowLayout.CENTER,10,10);
GridLayout lytGuessesResponses = new GridLayout(MastermindBackend.maxNumberOfTurns,2,10,10);
FlowLayout lytGameControl = new FlowLayout(FlowLayout.CENTER,10,10);
MastermindBackend mmb = new MastermindBackend();
public void init() {
setLookAndFeel();
setSize(400,650);
add(pnlMain);
pnlMain.setLayout(lytMain);
pnlMain.setSize(this.WIDTH,this.HEIGHT);
pnlMain.add(pnlCodePattern);
pnlMain.add(pnlGuessesResponses);
pnlMain.add(pnlGameControl);
pnlCodePattern.setLayout(lytCodePattern);
pnlCodePattern.setSize(250, 30);
pnlGuessesResponses.setLayout(lytGuessesResponses);
pnlGuessesResponses.setSize(250,500);
pnlGameControl.setLayout(lytGameControl);
pnlGameControl.setSize(250,75);
pnlGameControl.add(btnNewEngineKeyGame);
pnlGameControl.add(btnNewUserKeyGame);
pnlGameControl.add(btnProceedAction);
pnlGameControl.add(lblActionResponse);
btnNewEngineKeyGame.addActionListener(this);
btnNewUserKeyGame.addActionListener(this);
btnProceedAction.addActionListener(this);
pnlCodePattern.add(txtCodePattern);
txtCodePattern.setText(mmb.getSecretKeyDisplay());
txtCodePattern.setEnabled(false);
for (int i = 0;i < MastermindBackend.maxNumberOfTurns; i++) {
txtGuessPattern[i] = new JTextField(MastermindBackend.lengthOfPattern);
pnlGuessesResponses.add(txtGuessPattern[i]);
txtGuessFeedback[i] = new JTextField(MastermindBackend.lengthOfPattern);
pnlGuessesResponses.add(txtGuessFeedback[i]);
}
setVisible(true);//LIJKT ME OVERBODIG MAAR JA
}
public void ClearTextboxes() {
for (int i = 0;i < MastermindBackend.maxNumberOfTurns; i++) {
txtGuessPattern[i].setText("");
txtGuessFeedback[i].setText("");
}
}
public void DisableTextboxes() {
for (int i = 0;i < MastermindBackend.maxNumberOfTurns; i++) {
txtGuessPattern[i].setEnabled(false);
txtGuessFeedback[i].setEnabled(false);
}
}
public void startUserKeyGameUI() {
ClearTextboxes();
DisableTextboxes();
mmb.startUserKeyGame();
txtCodePattern.setText("");
txtCodePattern.setEnabled(true);
lblActionResponse.setText("Enter your key, or enter " + mmb.getSecretKeyDisplay() + " if you don't want to enter it.");
}
public void processUserKeyUI() {
String strUserKey = txtCodePattern.getText();
if (mmb.processUserKey(strUserKey)) {
txtCodePattern.setEnabled(false);
int g = mmb.getNumberOfGuessesDone();
//at this point engine has done one guess!!
txtGuessPattern[g - 1].setText(mmb.getTurnGuess(g - 1));
txtGuessFeedback[g - 1].setEnabled(true);
lblActionResponse.setText("Enter your feedback");
} else {
lblActionResponse.setText("Invalid key format");
}
}
public void processUserFeedbackUI() {
int g = mmb.getNumberOfGuessesDone();
String strUserFeedback = txtGuessFeedback[g - 1].getText();
if (mmb.processUserFeedback(strUserFeedback) == true) {
txtGuessFeedback[g - 1].setEnabled(false);
if (g < MastermindBackend.maxNumberOfTurns) {
txtGuessPattern[g].setText(mmb.getTurnGuess(g));
txtGuessFeedback[g].setEnabled(true);
}
if (mmb.getGameState() == MastermindBackend.enmGameState.gstWaiting) {
switch (mmb.getGameResult()) {
case grsGuessSucceeded:
lblActionResponse.setText("That was hard!");
break;
case grsGuessFailed:
lblActionResponse.setText("Congratulations! That was REALLY hard!!");
break;
case grsContradictoryResponse:
lblActionResponse.setText("Sorry, contradictory responses detected.");
}
} else {
lblActionResponse.setText("Enter your feedback");
}
} else {
lblActionResponse.setText("Invalid feedback format");
}
}
public void startEngineKeyGameUI() {
mmb.startEngineKeyGame();
txtCodePattern.setText(mmb.getCurrentCodePattern());
lblActionResponse.setText(btnNewEngineKeyGame.getText() + " started: please enter your guess");
txtCodePattern.setEnabled(false);
ClearTextboxes();
DisableTextboxes();
txtGuessPattern[mmb.getNumberOfGuessesDone()].setEnabled(true);
}
public void processUserGuessUI() {
int g = mmb.getNumberOfGuessesDone();
String strCurrentGuess = txtGuessPattern[g].getText();
if (mmb.processUserGuess(strCurrentGuess) == true) {
txtGuessFeedback[g].setText(mmb.getTurnFeedback(g));
txtGuessPattern[g].setEnabled(false);
if (g + 1 < MastermindBackend.maxNumberOfTurns) {
txtGuessPattern[g + 1].setEnabled(true);
}
if (mmb.getGameState() == MastermindBackend.enmGameState.gstWaiting) {
txtCodePattern.setText(mmb.getCurrentCodePattern());
if (mmb.getGameResult() == MastermindBackend.enmGameResult.grsGuessSucceeded) {
lblActionResponse.setText("Congratulations! Game over");
} else {
lblActionResponse.setText("Sorry .... Game over");
}
} else {
lblActionResponse.setText("Please enter your guess");
}
} else {
lblActionResponse.setText("Invalid guess format");
}
}
public void actionPerformed(ActionEvent event) {
Object cmdsrc = event.getSource();
if (cmdsrc == btnNewEngineKeyGame) {
startEngineKeyGameUI();
return;
}
if (cmdsrc == btnProceedAction && mmb.getGameState() ==
MastermindBackend.enmGameState.gstEngineKeyGame) {
processUserGuessUI();
return;
}
if (cmdsrc == btnNewUserKeyGame) {
startUserKeyGameUI();
return;
}
if (cmdsrc == btnProceedAction && mmb.getGameState() ==
MastermindBackend.enmGameState.gstWaitingForUserKey) {
processUserKeyUI();
return;
}
if (cmdsrc == btnProceedAction && mmb.getGameState() ==
MastermindBackend.enmGameState.gstUserKeyGame) {
processUserFeedbackUI();
return;
}
repaint();
}
private void setLookAndFeel() {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Exception exc) {
//ignore error
}
}
//DO I NEED A PAINT METHOD?
//public void paint(Graphics screen) {
// Graphics2D screen2D = (Graphics2D) screen;
//}
}
Dit werkt bijna altijd.
Maar in één specifiek scenario werkt het niet, dus de label wordt gewoon niet bijgewerkt in mijn browser.
Namelijk precies in dit gedeelte:
Code:
if (mmb.getGameState() == MastermindBackend.enmGameState.gstWaiting) {
switch (mmb.getGameResult()) {
case grsGuessSucceeded:
lblActionResponse.setText("That was hard!");
break;
case grsGuessFailed:
lblActionResponse.setText("Congratulations! That was REALLY hard!!");
break;
case grsContradictoryResponse:
lblActionResponse.setText("Sorry, contradictory responses detected.");
}
} else {
lblActionResponse.setText("Enter your feedback");
}
Is daar een verklaring voor? Vanuit NetBeans heb ik dit probleem niet.
Laatst bewerkt: