我尝试在这里编写一个程序,每次单击“步骤”按钮时都会添加一个程序。我遇到的问题是,每次单击“步骤”时,数字都不会递增。我想我应该在actionListener块中添加一些东西,但我不知道是什么。请帮我... 如果你认为某些事情不明确,我会非常快速地清理它!
面板
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Odometer extends JPanel{
private JLabel label, label2, label3;
private int counter;
public Odometer()
{
setLayout(new FlowLayout());
JButton button = new JButton("Step");
button.addActionListener(new Listener());
add(button);
this.setBackground(Color.black);
label = new JLabel("0");
label.setFont(new Font("serif", Font.BOLD, 50));
label.setForeground(Color.white);
label.setBackground(Color.black);
label.setOpaque(true);
add(label);
label2 = new JLabel("0");
label2.setFont(new Font("serif", Font.BOLD, 50));
label2.setForeground(Color.white);
label2.setBackground(Color.black);
label2.setOpaque(true);
add(label2);
label3 = new JLabel("0");
label3.setFont(new Font("serif", Font.BOLD, 50));
label3.setBackground(Color.white);
label3.setForeground(Color.black);
label3.setOpaque(true);
add(label3);
int counter = 0;
}
private class Listener implements ActionListener{
public void actionPerformed(ActionEvent e){
}
}
public void update()
{
counter = Integer.parseInt(label3.getText());
if(counter < 9){
counter++;
label3.setText(" " + counter);
}
else{
counter = 0;
label3.setText(" " + counter);
counter = Integer.parseInt(label2.getText());
if(counter < 9){
counter++;
label2.setText(" " + counter);
}
else{
counter = 0;
label2.setText(" " + counter);
counter = Integer.parseInt(label.getText());
}
if(counter<9){
counter++;
label.setText(" " + counter);
}
else{
counter = 0;
label.setText("0");
}
}
}
}
驱动程序
import javax.swing.JFrame;
public class Driver04
{
public static void main(String[] args)
{
JFrame frame = new JFrame("Odometer");
frame.setSize(400, 400);
frame.setLocation(200, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new Odometer());
frame.setVisible(true);
}
}
`
答案 0 :(得分:0)
您必须使用update()
方法调用actionPerformed(ActionEvent e)
方法。你还应该仔细看看你正在使用的if else块,可能是你遗漏了一些东西。
尝试使用以下代码(里程表现在实现ActionListener):
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Odometer extends JPanel implements ActionListener {
private JLabel label, label2, label3;
private int counter;
public Odometer()
{
setLayout(new FlowLayout());
int counter = 0;
JButton button = new JButton("Step");
button.addActionListener(this);
add(button);
this.setBackground(Color.black);
label = new JLabel("0");
label.setFont(new Font("serif", Font.BOLD, 50));
label.setForeground(Color.white);
label.setBackground(Color.black);
label.setOpaque(true);
add(label);
label2 = new JLabel("0");
label2.setFont(new Font("serif", Font.BOLD, 50));
label2.setForeground(Color.white);
label2.setBackground(Color.black);
label2.setOpaque(true);
add(label2);
label3 = new JLabel("0");
label3.setFont(new Font("serif", Font.BOLD, 50));
label3.setBackground(Color.white);
label3.setForeground(Color.black);
label3.setOpaque(true);
add(label3);
}
@Override
public void actionPerformed(ActionEvent e){
this.update();
}
public void update()
{
counter = Integer.parseInt(label3.getText());
if(counter < 9){
counter++;
// removed " " + and set the string value of the counter to the label
label3.setText(String.valueOf(counter));
}
else{
counter = 0;
label3.setText(counter);
counter = Integer.parseInt(label2.getText());
if(counter < 9){
counter++;
label2.setText(String.valueOf(counter));
}
else{
counter = 0;
label2.setText(String.valueOf(counter));
counter = Integer.parseInt(label.getText());
}
if(counter<9){
counter++;
label.setText(String.valueOf(counter));
}
else{
counter = 0;
label.setText("0");
}
}
}
}
请注意," " +
已被删除,以便能够将字符串解析为数字。我们还可以在解析字符串之前修剪标签文本中的空白区域。
下面是控制台中没有例外的屏幕截图:
答案 1 :(得分:0)
我做的是让它增加是将您的代码更改为:
label3.setText("" + counter); //Empty String
而不是
label3.setText(" " + counter);
既然已经修复了,那么你的逻辑仍然是关闭的。 每当这个地方超过9门槛时,它会将十位数增加一,数百位数增加。
所以看起来你做的是你首先没有将更新放在你的监听器中,因为在前面的帖子中正确识别了这个人,但是你也试图再次错误地转换字符串中的数字。
但由于几个原因,逻辑关闭了 这是您的更新方法
public void update()
{
counter = Integer.parseInt(label3.getText());
if(counter < 9){
counter++;
label3.setText(" " + counter);
}
else{ //Correctly checks for larger than 9 in 1's place
counter = 0;
label3.setText(" " + counter);
counter = Integer.parseInt(label2.getText());
if(counter < 9){
counter++;
label2.setText(" " + counter);
}
else{ //This is where code goes wrong
counter = 0;
label2.setText(" " + counter);
counter = Integer.parseInt(label.getText());
} < ---- This brace should be ...
if(counter<9){
counter++;
label.setText(" " + counter);
}
else{
counter = 0;
label.setText("0");
}
<---- Right over here
}
}
}
这是错误的原因是因为我们只应检查增加数百个地方,只有当10的地方有10个地方从10点增加到10点时才会增加数百个地方。代码处于当前状态时,它将计数器保持为与10相同的值,并以1递增。
当我在没有修复错误的情况下调用update()运行代码时,它将运行如下。 009 - &gt;对于上面的解释,210而不是010。
代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Odometer extends JPanel{
private JLabel label, label2, label3;
private int counter;
public Odometer()
{
setLayout(new FlowLayout());
JButton button = new JButton("Step");
button.addActionListener(new Listener());
add(button);
this.setBackground(Color.black);
label = new JLabel("0");
label.setFont(new Font("serif", Font.BOLD, 50));
label.setForeground(Color.white);
label.setBackground(Color.black);
label.setOpaque(true);
add(label);
label2 = new JLabel("0");
label2.setFont(new Font("serif", Font.BOLD, 50));
label2.setForeground(Color.white);
label2.setBackground(Color.black);
label2.setOpaque(true);
add(label2);
label3 = new JLabel("0");
label3.setFont(new Font("serif", Font.BOLD, 50));
label3.setBackground(Color.white);
label3.setForeground(Color.black);
label3.setOpaque(true);
add(label3);
}
private class Listener implements ActionListener{
public void actionPerformed(ActionEvent e){
update();
}
}
public void update()
{
counter = Integer.parseInt(label3.getText());
if(counter < 9){
System.out.println("increment");
counter++;
label3.setText("" + counter);
}
else{ //When the one's is greater than 9
counter = 0;
label3.setText("" + counter);
counter = Integer.parseInt(label2.getText());
if(counter < 9){
counter++;
label2.setText("" + counter);
}
else{ //When the 10's place is greater than 9
counter = 0;
label2.setText("" + counter);
counter = Integer.parseInt(label.getText());
if(counter<9){
counter++;
label.setText("" + counter);
}
else{
counter = 0;
label.setText("0");
}
}
}
}
}
*刚完成我的差事所以现在我可以解释你的错误:)。