Skip to content

Instantly share code, notes, and snippets.

@alcidesfp
Created April 24, 2012 13:35
Show Gist options
  • Save alcidesfp/2479711 to your computer and use it in GitHub Desktop.
Save alcidesfp/2479711 to your computer and use it in GitHub Desktop.
Ejemplo Swing Java
// -*- coding:utf-8; -*-
import java.awt.event.*;
import java.awt.BorderLayout;
import javax.swing.*;
/* Demuestra el uso de clases Swing en Java */
public class SimpleFrame extends JFrame {
public JLabel label;
public JButton button;
public SimpleFrame(){
super();
System.out.println("Inicializando ...");
// crea controles
label = new JLabel("Aplicación Swing en Java");
button = new JButton("Click me!");
// inicializa UI
setTitle("Hola Swing desde Java");
add(label, BorderLayout.CENTER);
add(button, BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
// asigna eventos
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
onClickBtn();
}
});
}
public void onClickBtn(){
label.setText("Hizo click!");
}
public static void main(String[] args){
SimpleFrame frame = new SimpleFrame();
frame.setVisible(true);
}
}
@yngwie74
Copy link

Desgraciadamente, no hay muchas opciones aquí. JButton.addActionListener toma un ActionListener como parámetro y párele de contar. El objetivo de usar una clase anónima es que esta tiene acceso automático a los miembros privados de la clase que la contiene (lo más parecido en java a un closure), lo que hace posible la llamada a onClickBtn().

La única otra opción es usar una clase privada en su lugar (que para efectos prácticos es casi lo mismo) o una clase separada al estilo Command Pattern que tome "this" como parámetro. No quiero dar a entender con esto que esta última opción sea mala. Al contrario, suele ser la mejor opción en varios contextos. Simplemente en este caso particular, resulta un tanto "overkill".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment