Separar os Eventos da Interface

Olá Galera, gostaria de saber se tem como separa os eventos do botão da interface, tenho este código e gostaria de separar os eventos do botão em outra classe, alguem poderia me ajudar, nisso pois sou novo em programacão java. Agradeço.

[code]package br.com.mtc.estatistica;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

import javax.swing.ImageIcon;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;
import javax.swing.UIManager;

import javax.swing.JRadioButton;

import javax.swing.JScrollPane;
import java.awt.SystemColor;
import java.awt.Toolkit;

import java.text.DecimalFormat;
import java.util.ArrayList;

import java.util.List;
import java.util.Set;
import java.util.TreeMap;
import java.awt.event.ActionEvent;
import javax.swing.JTable;

import javax.swing.JTextField;
import javax.swing.JComboBox;

import javax.swing.DefaultComboBoxModel;
import java.awt.Color;
import javax.swing.AbstractAction;
import javax.swing.Action;

public class Principal extends JFrame {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTable tblDados;
private static String modelo;
private DadosTableModel tableModel;
private JTextField txtVisibilidade;
JTextArea txtDados = new JTextArea();
private List<String> classeLista = new ArrayList<String>();
private final Action btnROL = new btnRol();
private final Action btnIntervalo = new btnIntervalo();
JScrollPane scrollPaneTabela = new JScrollPane();


/**
 * Launch the application.
 */
public static void main(String[] args) {
	EventQueue.invokeLater(new Runnable() {
		public void run() {
			try {
				Principal frame = new Principal();
				frame.setVisible(true);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	});
}

/**
 * Create the frame.
 */
public Principal() {
	super("Principal");
	setResizable(false);
	
	setIconImage(Toolkit.getDefaultToolkit().getImage(Principal.class.getResource("/br/com/mtc/estatistica/iconejanela.png")));
	setTitle("Estat\u00EDstica F\u00E1cil");
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setBounds(100, 100, 723, 315); //315
	setLocationRelativeTo(null);
	contentPane = new JPanel();
	contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
	setContentPane(contentPane);
	contentPane.setLayout(null);		
	JLabel lblNewLabel = new JLabel("New label");
	lblNewLabel.setIcon(new ImageIcon(Principal.class.getResource("/br/com/mtc/estatistica/icone.png")));
	lblNewLabel.setBounds(10, 15, 131, 270);
	contentPane.add(lblNewLabel);		
	JLabel lblComeceMontandoSua = new JLabel("Comece montando sua tabela de distribui\u00E7\u00E3o de Frequ\u00EAncia");
	lblComeceMontandoSua.setFont(new Font("Tahoma", Font.PLAIN, 14));
	lblComeceMontandoSua.setBounds(151, 15, 363, 30);
	contentPane.add(lblComeceMontandoSua);		
	JButton btnAjuda = new JButton("Ajuda");
	btnAjuda.setFont(new Font("Tahoma", Font.PLAIN, 12));
	btnAjuda.setBackground(SystemColor.inactiveCaption);
	btnAjuda.setBounds(615, 15, 89, 23);
	contentPane.add(btnAjuda);		
	JPanel panel = new JPanel();
	panel.setForeground(SystemColor.window);
	panel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Seus dados s\u00E3o:", TitledBorder.LEADING, TitledBorder.TOP, null, SystemColor.windowText));
	panel.setToolTipText("");
	panel.setBounds(151, 209, 553, 64);
	contentPane.add(panel);
	panel.setLayout(null);		
	JRadioButton rdbtnUmaPopulao = new JRadioButton("Uma Popula\u00E7\u00E3o");
	rdbtnUmaPopulao.setFont(rdbtnUmaPopulao.getFont().deriveFont(rdbtnUmaPopulao.getFont().getStyle() & ~Font.BOLD));
	rdbtnUmaPopulao.setBounds(11, 21, 119, 23);
	panel.add(rdbtnUmaPopulao);		
	JRadioButton rdbtnUmaAmostra = new JRadioButton("Uma Amostra");
	rdbtnUmaAmostra.setSelected(true);
	rdbtnUmaAmostra.setFont(rdbtnUmaAmostra.getFont().deriveFont(rdbtnUmaAmostra.getFont().getStyle() & ~Font.BOLD));
	rdbtnUmaAmostra.setBounds(132, 21, 115, 23);
	panel.add(rdbtnUmaAmostra);				
	JButton btnIntervalos = new JButton("Intervalos");
	btnIntervalos.setAction(btnIntervalo);
	btnIntervalos.setFont(new Font("Tahoma", Font.PLAIN, 12));
	btnIntervalos.setBackground(SystemColor.inactiveCaption);
	btnIntervalos.setBounds(423, 21, 104, 23);
	panel.add(btnIntervalos);		
	JScrollPane scrollPane = new JScrollPane();
	scrollPane.setBounds(151, 56, 553, 142);
	contentPane.add(scrollPane);
	txtDados.setWrapStyleWord(true);
	txtDados.setLineWrap(true);
	txtDados.setText("84;68;55;49;48;56;79;58;59;74;89;67;57;55;54;79;74;59;73;75;84;57;55;54;75;59;56;48;49;68;67;88;74;79;67;89;84;73;75;79;68;74;73;75;79;74;84;87;84;68");
	scrollPane.setViewportView(txtDados);
	JButton btnRol = new JButton("ROL");
	btnRol.setAction(btnROL);
	btnRol.setFont(new Font("Tahoma", Font.PLAIN, 12));
	btnRol.setBackground(SystemColor.inactiveCaption);
	btnRol.setBounds(317, 21, 74, 23);
	panel.add(btnRol);
	JPanel panelTabela = new JPanel();
	panelTabela.setBounds(10, 329, 694, 191);
	contentPane.add(panelTabela);
	panelTabela.setLayout(null);
	scrollPaneTabela.setBounds(0, 0, 694, 192);
	panelTabela.add(scrollPaneTabela);		
	JButton btnCalcularDistribuies = new JButton("Calcular Distribui\u00E7\u00F5es");
	btnCalcularDistribuies.setFont(new Font("Tahoma", Font.PLAIN, 12));
	btnCalcularDistribuies.setBackground(SystemColor.inactiveCaption);
	btnCalcularDistribuies.setBounds(10, 296, 177, 23);
	contentPane.add(btnCalcularDistribuies);		
	JPanel panel_1 = new JPanel();
	panel_1.setBorder(new TitledBorder(null, "Resultados", TitledBorder.LEADING, TitledBorder.TOP, null, null));
	panel_1.setBounds(10, 531, 421, 97);
	contentPane.add(panel_1);
	panel_1.setLayout(null);		
	JButton btnMdia = new JButton("M\u00E9dia");
	btnMdia.setFont(new Font("Tahoma", Font.PLAIN, 12));
	btnMdia.setBackground(SystemColor.inactiveCaption);
	btnMdia.setBounds(21, 24, 120, 23);
	panel_1.add(btnMdia);		
	JButton btnMediana = new JButton("Mediana");
	btnMediana.setFont(new Font("Tahoma", Font.PLAIN, 12));
	btnMediana.setBackground(SystemColor.inactiveCaption);
	btnMediana.setBounds(153, 24, 121, 23);
	panel_1.add(btnMediana);		
	JButton btnModa = new JButton("Moda");
	btnModa.setFont(new Font("Tahoma", Font.PLAIN, 12));
	btnModa.setBackground(SystemColor.inactiveCaption);
	btnModa.setBounds(284, 24, 120, 23);
	panel_1.add(btnModa);		
	JButton btnDesvioMdio = new JButton("Desvio M\u00E9dio");
	btnDesvioMdio.setFont(new Font("Tahoma", Font.PLAIN, 12));
	btnDesvioMdio.setBackground(SystemColor.inactiveCaption);
	btnDesvioMdio.setBounds(21, 58, 120, 23);
	panel_1.add(btnDesvioMdio);		
	JButton btnVarincia = new JButton("Vari\u00E2ncia");
	btnVarincia.setFont(new Font("Tahoma", Font.PLAIN, 12));
	btnVarincia.setBackground(SystemColor.inactiveCaption);
	btnVarincia.setBounds(153, 58, 120, 23);
	panel_1.add(btnVarincia);		
	JButton btnDesvioPadro = new JButton("Desvio Padr\u00E3o");
	btnDesvioPadro.setFont(new Font("Tahoma", Font.PLAIN, 12));
	btnDesvioPadro.setBackground(SystemColor.inactiveCaption);
	btnDesvioPadro.setBounds(284, 58, 120, 23);
	panel_1.add(btnDesvioPadro);		
	JPanel panel_2 = new JPanel();
	panel_2.setBorder(new TitledBorder(null, "Medidas de Divisibilidade", TitledBorder.LEADING, TitledBorder.TOP, null, null));
	panel_2.setBounds(441, 531, 263, 97);
	contentPane.add(panel_2);
	panel_2.setLayout(null);		
	txtVisibilidade = new JTextField();
	txtVisibilidade.setBounds(47, 27, 86, 20);
	panel_2.add(txtVisibilidade);
	txtVisibilidade.setColumns(10);		
	JComboBox cbxVisibilidade = new JComboBox();
	cbxVisibilidade.setBackground(new Color(255, 255, 255));
	cbxVisibilidade.setModel(new DefaultComboBoxModel(new String[] {"Quartil", "Decil", "Percentil"}));
	cbxVisibilidade.setBounds(153, 27, 100, 20);
	panel_2.add(cbxVisibilidade);		
	JLabel lblValor = new JLabel("Valor:");
	lblValor.setFont(lblValor.getFont().deriveFont(lblValor.getFont().getStyle() & ~Font.BOLD));
	lblValor.setBounds(10, 30, 37, 14);
	panel_2.add(lblValor);		
	JButton btnCalcular = new JButton("Calcular");
	btnCalcular.setFont(btnCalcular.getFont().deriveFont(btnCalcular.getFont().getStyle() & ~Font.BOLD));
	btnCalcular.setBackground(SystemColor.inactiveCaption);
	btnCalcular.setBounds(20, 63, 233, 23);
	panel_2.add(btnCalcular);
}

private JTable getTblDados(){
		tblDados= new JTable();	
		tblDados.setModel(getTableModel());
		System.out.println("getTbldados");
		return tblDados;
}

private DadosTableModel getTableModel(){
	System.out.println("getTableModelAntes");
	tableModel = new DadosTableModel(criarLista());
	System.out.println("getTableModel");
	return tableModel;
}

private List<Dados> criarLista(){
	
	String num = txtDados.getText().trim();
	String[] numvar = num.split(";");
	List<Dados> info = new ArrayList<Dados>();
	
	if((num.indexOf(".") != -1) || modelo == "INTERVALO"){  
		  Double[] numeroFloat = new Double[numvar.length];
		   for(int i = 0; i < numvar.length; i++)
		   {
		       numeroFloat[i] = Double.parseDouble(numvar[i]);
		   }
		   
		 TreeMap<String, Integer> lista = contarFrequenciaDouble(numeroFloat);
		 Set<String> teste = lista.keySet();
		 for (String keyc : teste){
			 	Dados val =new Dados();
				val.setClasse(keyc);
				val.setFi(lista.get(keyc));						
				info.add(val);
			
		}
		 
		 
	}  else{
		Integer[] numeroInt = new Integer[numvar.length];
		for(int i = 0; i < numvar.length; i++)
		   {
		       numeroInt[i] = Integer.parseInt(numvar[i]);
		   }
		  TreeMap<Integer, Integer> lista = contarFrequenciaInt(numeroInt);
		  Set<Integer> teste = lista.keySet();
		  for (Integer keyc : teste){
			 	Dados val =new Dados();
				val.setClasse(Integer.toString(keyc));
				val.setFi(lista.get(keyc));						
				info.add(val);
			
		 }
		
	}
		
	return info;
}



private TreeMap contarFrequenciaDouble(Double[] numeroFloat){
	
	TreeMap<Double, Integer> contMap = new TreeMap<Double, Integer>();	

	for(Double var : numeroFloat){
		if(!contMap.containsKey(var)){				
			contMap.put(var, 1);
		}else{
			Integer cont = contMap.get(var);
			cont++;
			contMap.put(var, cont);
		}
		
	}	

	double amplitude = (double)contMap.lastKey() - (double)contMap.firstKey();
	int comp = (int) Math.ceil((amplitude / (int)(Math.sqrt(numeroFloat.length))));
	
	TreeMap<Double, Double> classe = new TreeMap<Double, Double>();		
	for(double i = contMap.firstKey(); i <= contMap.lastKey(); i += comp ){
		classe.put(i, (double) (i+comp));
	}
	
	String formatar = (contMap.lastKey()).toString();
	formatar = "%"+formatar.length()+"d";
	
	DecimalFormat df = new DecimalFormat("###.#");

	TreeMap<String, Integer> classesFinal = new TreeMap<String, Integer>();		
	Set<Double> setClasse = classe.keySet();	
	for(Double inicio : setClasse){
		int freq  = 0;
		for(Double var : numeroFloat){
			if(var >= inicio && var < classe.get(inicio)){
				freq++;
			}				
		}
		classesFinal.put(df.format(inicio)+" |??? " + df.format((double)classe.get(inicio)),freq);			
	}
	
	return classesFinal;

	
}

private TreeMap contarFrequenciaInt(Integer[] strArray){
	
	TreeMap<Integer, Integer> contMap = new TreeMap<Integer, Integer>();		

	for(Integer var : strArray){
		if(!contMap.containsKey(var)){				
			contMap.put(var, 1);
		}else{
			Integer cont = contMap.get(var);
			cont++;
			contMap.put(var, cont);
		}
		
	}		

	return contMap;
				
}	
private class btnRol extends AbstractAction {
	public btnRol() {
		putValue(NAME, "ROL");
	}
	public void actionPerformed(ActionEvent e) {
		modelo = "ROL";
		setBounds(100, 100, 723, 660);
		setLocationRelativeTo(null);		  
		scrollPaneTabela.setViewportView(getTblDados());
		System.out.println();
	
	}
}
private class btnIntervalo extends AbstractAction {
	public btnIntervalo() {
		putValue(NAME, "Intervalo");
	}
	public void actionPerformed(ActionEvent e) {
		modelo = "INTERVALO";
		setBounds(100, 100, 723, 660);
		setLocationRelativeTo(null);		
		scrollPaneTabela.setViewportView(getTblDados());
		
	}
}

}
[/code]