我使用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++;
}
答案 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