2016-06-22 15 views
1

GUIで作業していて、すべてが正しく表示されていますが、ボタンを押したときに変数の値を変更するのに問題があります。変数はpassoverと呼ばれ、0引数のコンストラクタで1997の値に初期化されるプライベートintで、押されたときにpassoverの値を変更する必要がある3つのボタンがあります。ActionListenerで変数を変更する際に問題が発生しました

過ぎ越しのためのコード:ボタンの

panel.setBorder(
    BorderFactory.createEmptyBorder(0, 0, 0, 0)); 
    panel.setLayout(new BorderLayout(0, 0)); 

    JPanel topPanel = getPanel(); 
    topPanel.setLayout(new GridBagLayout()); 
    topPanel.setBackground(new Color(173, 216, 230)); 
    JLabel moveLabel = getLabel("Move Data"); 
    moveLabel.setFont(new Font("Serif", Font.PLAIN, 20)); 
    addComp(topPanel, moveLabel, 0, 0, 1, 1, 0.5, 0.2, 
      GridBagConstraints.HORIZONTAL, GridBagConstraints.NORTHEAST); 
    JLabel passoverLabel = getLabel("  Passover : " + passover); 
    passoverLabel.setFont(new Font("Serif", Font.PLAIN, 20)); 
    addComp(topPanel, passoverLabel, 1, 0, 1, 1, 0.5, 0.2, 
      GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER); 

コード:

JPanel bottomRightPanel = getPanel(); 
    bottomRightPanel.setBorder(
       BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP)); 
    bottomRightPanel.setLayout(new GridBagLayout()); 
    bottomRightPanel.setBackground(new Color(255, 105, 180)); 
    JPanel passoverButtonPanel = getPanel(); 
    passoverButtonPanel.setBackground(new Color(255, 105, 180)); 
    passoverButtonPanel.setLayout(new BoxLayout(passoverButtonPanel, BoxLayout.Y_AXIS)); 
    nextPassoverButton = new JButton("Next Passover"); 
    goToPassoverButton = new JButton("Go To Passover: "); 
    previousPassoverButton = new JButton("Previous Passover"); 
    JLabel filler = getLabel(" "); 
    goToField = new JTextField(6); 
    goToField.setPreferredSize(new Dimension(5, 30)); 


    theHandler handler = new theHandler(); 
    nextPassoverButton.addActionListener(handler); 
    goToPassoverButton.addActionListener(handler); 
    previousPassoverButton.addActionListener(handler); 
    goToField.addActionListener(handler); 

私はnextPassoverButtonが押されたときに過越の値が1を上昇させたい、previousPassoverButtonが押されたときに1を低下させ、そしてgoToPassoverButtonが押されたときにユーザーがgoToFieldに入力した値に変更されます。私はゲッターとセッターを使用する必要があると思いますが、私は、私はそれを行うだろうか見当がつかないので

public class theHandler extends MyDataPalV2 implements ActionListener{ 

    public void actionPerformed(ActionEvent event) 
    { 


     if (event.getSource() == goToField) 
     { 
      this.passover = Integer.parseInt(String.format("%s", event.getActionCommand())); 
     } 

     if (event.getSource() == nextPassoverButton) 
     { 
      this.passover++; 
     } 

     if (event.getSource() == previousPassoverButton) 
     { 
      this.passover--; 
     } 
    } 
} 

エラーがプライベートアクセスエラーです:よう

私のActionListenerクラスが見えます。おそらく、これを行うための完全な別の方法がありますか?

私の投稿に間違いがあれば、これは初めての投稿です。

+0

[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –

答えて

1

「==」で2つのオブジェクトを比較することはできません。代わりに.equals(Object)を使用してください。

if(event.getSource().equals(goToField)) 
+0

ああ、そういったことを忘れてしまった。 – Blake

1

getterとsetterは、プライベートint passoverと同じクラスのパブリックメソッドになります。 getメソッドは、private intの値を返す単一行のメソッドです。同様に

public static int getPassover(){ 
    return passover; 
} 

これは、過ぎ越しと同じクラスにあり、アクセスできるためです。

セッターがちょうどまっすぐに値を設定します:あなたは、スレッドを使用している場合

public static void setPassover(int num){ 
    passover = num; 
} 

はこれに注意してください。あなたが得るのsetメソッドでそれをしたい場合、あなたは過越のクラス変数でない場合は、メソッドの見出しのうち、」静的なのがかかります

setPassover(getPassover() + 1); 

のようにそれをインクリメントすることができ、あなたの方法については

、 。これは理にかなっていますか?

+1

セッターとゲッターには意味があると思います。私がまだ混乱していることの1つは、プログラムを流行させる方法です。1997年を表示する代わりに、ボタンを使って何をするかによって、別の番号が表示されます。私はそれを正しくやっている方法ですか、私はただ何かを欠いているのですか、それとも私は完全に間違っていますか?以前はActionListenerを一度もやったことがありません。 – Blake

0

新しい値passoverを、過渡値の変更後にハンドラコードのpassoverLabelに設定する必要があります。それ以外の場合は、ラベルに新しい値が表示されません。

passoverLabel.setText(Integer.toString(passover)) 
関連する問題