在Java中按钮单击时,计数器值不会更改

时间:2015-12-29 14:48:04

标签: java swing user-interface

我使用GUI在Java中遇到了问题。我在Button的鼠标单击事件中使用了计数器值,因此每次单击Button时计数器值都会改变。

但问题是它不起作用,意味着当我们点击按钮时计数器值不会改变。我还使用了按钮操作执行事件,但仍然计数器值没有改变......

请有人帮助我,我会感激... 这是代码。看看这个 。 。 。

private void jButton4MouseClicked(java.awt.event.MouseEvent evt) {                                      

    int count=0;
    if(count<questions1.length)
    {
           System.out.println(count);

           jLabel4.setText(questions1[count]);
           jLabel5.setText(answers1[count]);
    }      
    count++;
}                                     

2 个答案:

答案 0 :(得分:2)

您应该将count变量移动到更大的范围。您可以将其声明为类实例变量。

答案 1 :(得分:2)

推荐的解决方案:

主要解决方案是@CubeJockey在OP注释中说明,并且从@AlexandrRadchykov's answer开始:将count变量放在更高的范围内(可能作为类范围的变量)。

另一种解决方案:

根据您的用例,有第二种解决方案,即根本没有int变量,并从之前的状态解析。

但是请注意,这比主要方法的CPU效率更低(并且内存方面更好),并且仅适用于低流量方法/事件(这似乎是OP的情况)。它还取决于JLabel(或您输出的任何组件)文字格式。

考虑JLabel的文本是计数器本身:

private void jButtonCounterMouseClicked(java.awt.event.MouseEvent evt) {
  int count = Integer.parseInt(jLabelCounter.getText());
  count += 1;
  jLabelCounter.setText(count);
  //Condensed: jLabelCounter.setText(Integer.parseInt(jLabelCounter.getText()) + 1);
}

因此,如果questions1[index]数组的内容格式包含索引,则可以应用相同的 parse-from-text 技术。考虑questions[] "1. How are you?"语法,其索引位于开头,根据"."":"")"(正则表达式)与文本的其余部分分开:"\\.|\\:|\\)"):

private void jButtonCounterMouseClicked(java.awt.event.MouseEvent evt) {
  int index = Integer.parseInt(jLabel4.getText().split("\\.|\\:|\\)", 2)[0]);
  if (index < questions1.length) {
    jLabel4.setText(questions1[index]);
  }
  if (index < answers1.length) {
    jLabel5.setText(answers1[index]);
  }
}

关于代码的一些附注:

如果您的answers1数组总是等同于questions1数组,那么 地图 {{1}可能会更好}到他们各自的answers

questions