1

このリンクから次のコードがあります 。. Swing フレームワークと単純な ChangeListener の例を使用します。

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class StateListener {

    public static void main(String args[]) {

  JFrame jFrame = new JFrame("");

  jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  JButton button = new JButton("Press Me");

  ActionListener actionListner = new ActionListener() {

@Override

public void actionPerformed(ActionEvent event) {

    AbstractButton absButton = (AbstractButton) event.getSource();

    boolean selected = absButton.getModel().isSelected();

    System.out.println("Selected=" + selected + " \n");

}

  };

  ChangeListener changeListner = new ChangeListener() {

@Override

public void stateChanged(ChangeEvent event) {

    AbstractButton aButton = (AbstractButton) event.getSource();

    ButtonModel aModel = aButton.getModel();

    boolean armed = aModel.isArmed();

    boolean pressed = aModel.isPressed();

    boolean selected = aModel.isSelected();

    System.out.println("Armed :" + armed + " - Pressed :" + pressed + " - Selected :" + selected);

}

  };

  button.addActionListener(actionListner);

  button.addChangeListener(changeListner);

  Container cPane = jFrame.getContentPane();

  cPane.add(button, BorderLayout.CENTER);

  jFrame.setSize(800, 500);

  jFrame.setVisible(true);
    }
}

私の質問は: 1) をクリックするPress Meと、出力は

Armed :true - Pressed :false - Selected :false
Armed :true - Pressed :true - Selected :false
Selected=false 

Armed :true - Pressed :false - Selected :false
Armed :false - Pressed :false - Selected :false

Listener61 行目と 63 行目に 2 つの呼び出ししかありません。

button.addActionListener(actionListner);

  button.addChangeListener(changeListner);

出力は

Selected=false 

    Armed :true - Pressed :false - Selected :false

しかし、私は理解できない4行の出力を取得しています

2)。メソッドは、ChangeListener または ActionListener によってオーバーライドされないため、クラスaddActionListeneraddChangeListener一部ですか?JButton

ありがとう、私は Swing Framework を使用する初心者です。どんな助けでも大歓迎です。

4

2 に答える 2

2
boolean selected = absButton.getModel().isSelected();

だけであるべき

boolean selected = absButton.getModel().isPressed();

からのみChangeListenerイベントを発生させることができ、ButtonModelその実装は、MouseKey EventsXxxButtonUI

isArmed();
isPressed();
isSelected();
isRollover() 

ActionListenermouseClickedandENTERおよびSPACEKey Eventsから起動されます。これらKeyBindingsは JButtons API で実装されます。

于 2013-09-09T18:15:16.837 に答える