2016-07-30 1 views
0

ステップボタンをクリックするたびに1つ追加するプログラムをここに書き込もうとしました。私が抱えている問題は、ステップをクリックするたびに数字が増分していないことです。私は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

label3.setText("" + counter); //Empty String

の代わり

label3.setText(" " + counter);

これは修正されましたが、ロジックはまだオフです。 自分の場所が9のしきい値を超えたときはいつでも、10の位を1つずつ増やし、数百の位を2つ増やします。

だから、以前の投稿で正しく識別された人物としてリスナーに更新を入れなかったのですが、以前の投稿で正しく識別された文字列の番号を誤って改めて変換しようとしました。

しかし、ロジックは、いくつかの理由のためにオフだったが ここにあなたのアップデート方法

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の場所を9から10に増やす変更があった場合に限ります。現在の状態のコードでは、カウンターを10と同じ値として保持し、1ずつ増分します。

バグ修正なしで呼び出されたupdate()でコードを実行すると、次のように実行されます。上記の説明のために010ではなく、009→210となる。

コード:

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


    } 
} 

*ちょうど今、私はあなたのバグを:)説明することができ、私の用事を終えました。

+0

ありがとうございました! –

0

あなたはactionPerformed(ActionEvent e)方法であなたのupdate()メソッドを呼び出す必要があります。また、使用している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

+0

ありがとうございます!私はコードを試して、それは私がステップボタンをクリックすることができますそれは1つに行くと停止し、 "スレッドの例外" AWT - EventQueue - 0 "java.lang.NumberFormatExceptionのような多くのエラーを与える:入力文字列:" 1 "" –

+0

私のコードを更新しました。文字列を数値に解析できるように、 '' + ''が削除されました。また、文字列を解析する前に、ラベルテキストの空のスペースをトリミングすることもできます。 – cdaiga

+0

"+"を取り除くとintを文字列に変換できますか? –

関連する問題