Aerophite
Aerophite

Reputation: 215

JLabel will not change after button click

Basically, I want the text of 'lblIndividualScore' to change when the button 'btnCalculate' is clicked...but when i click it, the label doesn't change. I put a println right after it and I know that everything is being calculated correctly...it just won't change.

below is the code portions, any ideas?

Here is the action listener snippet

else if (e.getSource() == btnCalculate) {
  setClassification();
  setTargetOrLight();
  setProneTotal();
  setStandingTotal();
  setKneelingTotal();
  setIndividualTotal();
}

Here is what the action listener calls

public void setClassification() {
  classification = (String)cmbClassification.getSelectedItem();

  if (classification.equals("Senior") && target) {
    txtProne2.setEditable(true);
    txtKneeling2.setEditable(true);
    txtStanding2.setEditable(true);
    txtProne2.setVisible(true);
    txtKneeling2.setVisible(true);
    txtStanding2.setVisible(true);
    lblStanding.setText("Standing");
    lblKneeling.setText("Kneeling");
  }
  else if (classification.equals("Intermediate") || (classification.equals("Senior") && !target)) {
    txtProne2.setEditable(false);
    txtKneeling2.setEditable(false);
    txtStanding2.setEditable(false);
    txtProne2.setVisible(false);
    txtKneeling2.setVisible(false);
    txtStanding2.setVisible(false);
    lblStanding.setText("Standing");
    lblKneeling.setText("Kneeling");
  }
  else {
    txtProne2.setEditable(false);
    txtKneeling2.setEditable(false);
    txtStanding2.setEditable(false);
    txtProne2.setVisible(false);
    txtKneeling2.setVisible(false);
    txtStanding2.setVisible(false);
    lblStanding.setText("Prone");
    lblKneeling.setText("Prone");
  }
}

public void setTargetOrLight() {
  if (((String)cmbTarget.getSelectedItem()).equals("Target Rifle")) {
    target = true;
  }
  else {
    target = false;
  }
}

public void setProneTotal() {
  try {
    if (classification.equals("Senior") && target) {
      int prone1 = 0;
      int prone2 = 0;
      prone1 = Integer.parseInt(txtProne1.getText());
      prone2 = Integer.parseInt(txtProne2.getText());
      proneTotal = prone1 + prone2;
    }
    else if (classification.equals("Intermediate") || (classification.equals("Senior") && !target)) {
      proneTotal = Integer.parseInt(txtProne1.getText());
    }
    else {
      int prone1 = Integer.parseInt(txtProne1.getText());
      int prone2 = Integer.parseInt(txtStanding1.getText()); 
      int prone3 = Integer.parseInt(txtKneeling1.getText()); 
      proneTotal = prone1 + prone2 + prone3;
    }
  }
  catch(NumberFormatException nfe) {
    System.err.println(nfe + ": You must enter a valid number - Prone");
  }
}

public void setStandingTotal() {
  try {
    if (classification.equals("Senior") && target) {
      int standing1 = 0;
      int standing2 = 0;
      standing1 = Integer.parseInt(txtStanding1.getText());
      standing2 = Integer.parseInt(txtStanding2.getText());
      standingTotal = standing1 + standing2;
    }
    else if (classification.equals("Intermediate") || (classification.equals("Senior") && !target)) {
      standingTotal = Integer.parseInt(txtStanding1.getText());
    }
    else {
      standingTotal = 0;
    }
  }
  catch (NumberFormatException nfe) {
    System.err.println(nfe + ": You must enter a valid number - Standing");
  }
}

public void setKneelingTotal() {
  try {
    if (classification.equals("Senior") && target) {
      int kneeling1 = 0;
      int kneeling2 = 0;
      kneeling1 = Integer.parseInt(txtKneeling1.getText());
      kneeling2 = Integer.parseInt(txtKneeling2.getText());
      kneelingTotal = kneeling1 + kneeling2;
    }
    else if (classification.equals("Intermediate") || (classification.equals("Senior") && !target)) {
      kneelingTotal = Integer.parseInt(txtKneeling1.getText());
    }
    else {
      kneelingTotal = 0;
    }
  }
  catch (NumberFormatException nfe) {
    System.err.println(nfe + ": You must enter a valid number - Kneeling");
  }
}

public void setIndividualTotal() {
  individualTotal = proneTotal + kneelingTotal + standingTotal;
  lblIndividualTotal.setText("" + individualTotal);
  System.err.println(individualTotal);
}

As stated above, I have that end println 'System.err.println(individualTotal);' printing the total and it DOES print so the number is getting there but the lbl isn't changing.

Please let me know if there is anything else that you need.

EDIT:

The setTexts in the setClassification() method also do not work.

Upvotes: 0

Views: 2369

Answers (1)

Robin
Robin

Reputation: 36601

Please post an SSCCE instead of long pieces of code. See below for an example SSCCE which updates the text of a JLabel when a JButton is pressed, and which works without any fancy steps. When you manage to create an SSCCE reproducing your problem, you most likely will know what causes your problem, and if not, we do not have to go through irrelevant lines of code

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ChangeLabelText {
  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      @Override
      public void run() {
        JFrame frame = new JFrame( "TestFrame" );
        JPanel content = new JPanel( new FlowLayout(  ) );
        final JLabel label = new JLabel( "Label" );
        content.add( label );
        JButton button = new JButton( "Change text" );
        button.addActionListener( new ActionListener() {
          @Override
          public void actionPerformed( ActionEvent e ) {
            label.setText( "Another text" );
          }
        } );
        content.add( button );
        frame.getContentPane().add( content );
        frame.pack();
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.setVisible( true );
      }
    } );
  }
}

Upvotes: 2

Related Questions