ビデオ: 業務モデリングとシステム開発(7) ~クラス図とアクティビティ図~ 2024
ここに大きなニュースがあります! Javaでは、別のクラスの内部でクラスを定義することができます。ここで、
GameFrame
クラスには、
MyActionListener
という名前のクラスが含まれています。
import java。 awt。 FlowLayout;
import java。 awt。イベント。 ActionEvent;
import java。 awt。イベント。 ActionListener;
import java。 util。ランダム;
import javax。スイング。 JButton;
import javax。スイング。 JFrame;
import javax。スイング。 JLabel;
import javax。スイング。 JTextField;
クラスGameFrameはJFrameを拡張します。{ private static final long serialVersionUID = 1L;
int randomNumber = new Random()。 nextInt(10)+1;
int numGuesses = 0;
JTextField textField = new JTextField(5);
<! - 2 - >
JLabelラベル=新しいJLabel(numGuesses + "推測");
public GameFrame(){
setDefaultCloseOperation(JFrame。EXIT_ON_CLOSE);
setLayout(new FlowLayout());
add(textField);
add(ボタン);
add(ラベル);
ボタンを押します。 addActionListener(
new MyActionListener() );
setVisible(true);
String textFieldText =
textField
クラスMyActionListenerは、ActionListenerを実装します。 getText();
if(Integer。parseInt(textFieldText)== randomNumber){
ボタン。 setEnabled(false);
textField。 setText(textField。getText()+ "はい!"); textField。 setEnabled(false); } else {
textField。 setText( "");
textField。 requestFocus();
}
numGuesses ++;
文字列guessWord =(numGuesses == 1)? "guess": "推測";
ラベル。 setText(numGuesses + guessWord);
}
}
}
上記の
MyActionListener
クラスは、
内部クラスです。
内部クラスは他のクラスとよく似ています。しかし、内部クラスのコード内では、囲むクラスのフィールドを参照することができます。たとえば、
MyActionListener
内のいくつかのステートメントは、
textField という名前を使用し、 textField
は、
GameFrame
クラスで定義されています。
上記のコードは、
MyActionListener
クラスを1回だけ使用することに注意してください。 (唯一の使用は
button。addActionListener
ボタンの呼び出しです。)だから、本当に一度だけ使用されるものの名前が必要ですか?いいえ、あなたはしません。
ボタンの呼び出しの内側のクラスの定義全体を置き換えることができます。addActionListener
これを行うと、匿名の内部クラスが
存在します。
これはどのように動作するかです。
import java。 awt。 FlowLayout;
import java。 awt。イベント。 ActionEvent;
import java。 awt。イベント。 ActionListener; import java。 util。ランダム; import javax。スイング。 JButton;
import javax。スイング。 JFrame;
import javax。スイング。 JLabel;
import javax。スイング。 JTextField;
クラスGameFrameはJFrameを拡張します。{ private static final long serialVersionUID = 1L;
int randomNumber = new Random()。 nextInt(10)+1;
int numGuesses = 0;
JTextField textField = new JTextField(5);
JButtonボタン=新しいJButton( "推測");
JLabelラベル=新しいJLabel(numGuesses + "推測");
public GameFrame(){
setDefaultCloseOperation(JFrame。EXIT_ON_CLOSE);
setLayout(new FlowLayout());
add(textField);
add(ボタン);
add(ラベル);
ボタンを押します。 addActionListener(
新しいActionListener(){ @Override
public void actionPerformed(ActionEvent e){文字列textFieldText =テキストフィールドgetText();
if(Integer.parseInt(textFieldText)= = false);
ボタンをクリックします。setEnabled(false);
文字列guessWord =(numGuesses == 1)? "guesses": "推測";
} }
);
pack();
setVisible(true);
}
}
内部クラスは、
actionPerformed
メソッドなどのイベントハンドラのようなものに適しています。
匿名の
内部クラスの最も難しいことは、かっこ、中括弧、および字下げを追跡していることです。いくつかの謙虚な助言:内部クラスなしでコードを書くことから始めます。後で、通常のJavaクラスで飽きると、通常のクラスのいくつかを内部クラスに変更して試してください。