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

classe contém uma classe chamada 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.


Publicações relacionadas