Como criar classes internas em java
Aqui está uma grande notícia! Em Java, você pode definir uma classe dentro de outra classe! Aqui o Gameframe
Conteúdo
MyActionListener
.importação java.awt.FlowLayout-
importação java.awt.event.ActionEvent-
importação java.awt.event.ActionListener-
importação java.util.Random-
importação javax.swing.JButton-
importação javax.swing.JFrame-
importação javax.swing.JLabel-
importação javax.swing.JTextField-
classe Gameframe estende Jframe {
private static final long serialVersionUID = 1L-
int randomNumber = Random (). nextInt (10) + 1-
int numGuesses = 0-
JTextField textField = new JTextField (5) -
botão JButton = new JButton ("Acho") -
JLabel label = new JLabel (numGuesses + " suposições") -
Gameframe pública () {
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) -
setLayout (new FlowLayout ()) -
adicionar (textField) -
adicionar (botão) -
adicionar (label) -
button.addActionListener (nova MyActionListener ()) -
Video: Certificacao Java Classes Internas Aula 2
pacote()-
setVisible (true) -
}
Video: aula 4748 java seIII Classes Genericas criando e usando elas
classe MyActionListener implementa ActionListener {
@Sobrepor
public void actionPerformed (ActionEvent e) {
Corda textFieldText = campo de texto.getText () -
if (Integer.parseInt (textFieldText) == randomNumber) {
button.setEnabled (false) -
textField.setText (textField.getText () + " Sim!") -
textField.setEnabled (false) -
} outro {
textField.setText ("") -
textField.requestFocus () -
}
numGuesses ++ -
Corda guessWord = (numGuesses == 1)? " acho" : " suposições"-
label.setText (numGuesses +) - guessWord
}
}
}
o MyActionListener
classe acima é um classe interna. Uma classe interna é muito parecido com qualquer outra classe. Mas no código de uma classe interna, você pode se referir a campos da classe delimitador. Por exemplo, várias declarações dentro MyActionListener
usar o nome campo de texto
, e campo de texto
é definida na envolvente Gameframe
classe.
Observe que o código acima usa a MyActionListener
classe apenas uma vez. (O único uso está em uma chamada para button.addActionListener
.) Então, você realmente precisa de um nome para algo que é usado apenas uma vez? Não, você não. Você pode substituir toda a definição da classe interna dentro da chamada para button.addActionListener
. Quando você fizer isso, você tem um classe interna anônima. É assim que funciona.
importação java.awt.FlowLayout-
importação java.awt.event.ActionEvent-
importação java.awt.event.ActionListener-
importação java.util.Random-
importação javax.swing.JButton-
importação javax.swing.JFrame-
importação javax.swing.JLabel-
importação javax.swing.JTextField-
classe Gameframe estende Jframe {
private static final long serialVersionUID = 1L-
int randomNumber = Random (). nextInt (10) + 1-
int numGuesses = 0-
JTextField textField = new JTextField (5) -
botão JButton = new JButton ("Acho") -
JLabel label = new JLabel (numGuesses + " suposições") -
Gameframe pública () {
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE) -
setLayout (new FlowLayout ()) -
adicionar (textField) -
adicionar (botão) -
adicionar (label) -
button.addActionListener (novo ActionListener () {
@Sobrepor
public void actionPerformed (ActionEvent e) {
Corda textFieldText = textField.getText () -
if (Integer.parseInt (textFieldText) == randomNumber) {
button.setEnabled (false) -
textField.setText (textField.getText () + " Sim!") -
textField.setEnabled (false) -
} outro {
textField.setText ("") -
textField.requestFocus () -
}
numGuesses ++ -
Corda guessWord = (numGuesses == 1)? " acho" : " suposições"-
label.setText (numGuesses +) - guessWord
}
}) -
pacote()-
setVisible (true) -
}
}
classes internas são bons para coisas como manipuladores de eventos, tais como a ação executada
método. A coisa mais difícil sobre uma anônimo classe interna é manter o controle dos parênteses, as chaves, e o recuo Alguns humilde conselho: comece por escrever código sem quaisquer classes internas. Mais tarde, quando você tornar-se aborrecido com classes Java comuns, experiência, alterando algumas das suas classes comuns em classes internas.