单击按钮后JLabel不会更改

时间:2012-04-07 16:50:23

标签: swing jlabel settext

基本上,我想在点击按钮'btnCalculate'时更改'lblIndividualScore'的文字...但是当我点击它时,标签不会改变。我在它之后放了一个println,我知道一切都在正确计算......它不会改变。

下面是代码部分,有什么想法吗?

以下是动作侦听器代码段

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

以下是动作侦听器调用的内容

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);
}

如上所述,我有结束println'System.err.println(individualTotal);'打印总数并进行打印,这样数字就会到达,但是lbl没有变化。

如果您还有其他需要,请告诉我。

编辑:

setClassification()方法中的setTexts也不起作用。

1 个答案:

答案 0 :(得分:2)

请发布SSCCE而不是长段代码。请参阅下面的示例SSCCE,它在按下JLabel时更新JButton的文本,并且无需任何花哨的步骤即可运行。当您设法创建一个重现问题的SSCCE时,您很可能会知道导致问题的原因,如果没有,我们就不必通过不相关的代码行

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 );
      }
    } );
  }
}