创建一个里程表

时间:2016-07-30 00:40:47

标签: java user-interface actionlistener

我尝试在这里编写一个程序,每次单击“步骤”按钮时都会添加一个程序。我遇到的问题是,每次单击“步骤”时,数字都不会递增。我想我应该在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);
      }
   }

`

2 个答案:

答案 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");
         }
      }
   }
}

请注意," " +已被删除,以便能够将字符串解析为数字。我们还可以在解析字符串之前修剪标签文本中的空白区域。

下面是控制台中没有例外的屏幕截图:

Odometer test screen

答案 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");
            }
         }
      }


   }
}

*刚完成我的差事所以现在我可以解释你的错误:)。