Hola gente les traigo un programita que estuve haciendo es muy simple pero espero que les pueda servir a aquellos programadores que les gusta saber la cantidad de lineas que tiene sus programas :P
(http://oi61.tinypic.com/21eq62f.jpg)
- Creamos la Ventana (nombre: Aplicacion)
package aplicacion;
import java.awt.BorderLayout;
public class Aplicacion extends JFrame {
/*
* Creamos nuestra GUI donde veremos todos los elementos visuales
*
*/
private JMenuBar barra;
private JMenu menu;
public JMenuItem menuItem;
private JScrollPane scrollPane;
private JPanel panelCentral;
public JTextArea area;
private int lineas;
public JLabel labelContador;
private JPanel panelInferior;
private String texto;
private JMenu menuFormato;
private JMenu menuFuente;
private JMenu menuTamanio;
private JMenu menuColor;
public JMenuItem paletaDeColores;
public JMenuItem tamanio2;
public JMenuItem tamanio1;
public JMenuItem fuente1;
public JMenuItem fuente2;
public JMenuItem fuente3;
public Aplicacion() {
/*
* En el constructos inicializamos los paneles y la configuracion de la ventana
*/
iniciarPanelInferior();
iniciarPanelCentral();
iniciarMenu();
iniciarGUI();
}
private void iniciarPanelInferior() {
/*
* Creamos nuestro PanelInferior y lo añadimos a la parte SUR de la Ventana
*/
panelInferior = new JPanel();
labelContador = new JLabel(" ");
labelContador.setFont(new Font("Arial Unicode MS", Font.BOLD, 18));
panelInferior.add(labelContador);
getContentPane().add(panelInferior, BorderLayout.SOUTH);
}
private void iniciarMenu() {
/*
* Iniciamos nuestro menu que luego llevara a cabo los eventos del usuario
*/
barra = new JMenuBar();
menu = new JMenu("Opciones");
menuFormato = new JMenu("Formato");
menuItem = new JMenuItem("Abrir Archivo");
menu.add(menuItem);
menu.add(menuFormato);
menuColor = new JMenu("Color");
menuFormato.add(menuColor);
paletaDeColores = new JMenuItem("Abrir Paleta de colores");
menuColor.add(paletaDeColores);
menuTamanio = new JMenu("Tama\u00F1o");
menuFormato.add(menuTamanio);
tamanio1 = new JMenuItem("18");
menuTamanio.add(tamanio1);
tamanio2 = new JMenuItem("20");
menuTamanio.add(tamanio2);
menuFuente = new JMenu("Fuente");
menuFormato.add(menuFuente);
fuente3 = new JMenuItem("MonoSpaced");
menuFuente.add(fuente3);
fuente2 = new JMenuItem("Times New Roman");
menuFuente.add(fuente2);
fuente1 = new JMenuItem("Arial");
menuFuente.add(fuente1);
barra.add(menu);
setJMenuBar(barra); //Agregamos la barra con los menues a la ventana
}
private void iniciarPanelCentral() {
/*
* Iniciamos el panelCentral de la aplicacion donde tendremos el texto a contar
*/
area = new JTextArea();
area.setFont(new Font("Monospaced", Font.PLAIN, 15));
scrollPane = new JScrollPane(area);
scrollPane.setViewportView(area);
scrollPane
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
getContentPane().add(scrollPane, BorderLayout.CENTER);
}
private void iniciarGUI() {
/*
* Configuramos las caracteristicas de la ventana (tamaño,titulo,visibilidad,eje de vista)
*/
setSize(595, 426);
setTitle("Contador de Lineas");
setLocationRelativeTo(null);
setVisible(true);
}
}
- Creamos el Controlador (nombre: Controlador)
package controlador;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import modelo.Modelo;
import aplicacion.Aplicacion;
public class Controlador implements ActionListener {
/*
* Creamos Nuestro controlador que comunicara todos los eventos con el modelo
*/
private int tam = 16;
private Modelo modelo;
private Aplicacion aplicacion;
public Controlador(Aplicacion _ap, Modelo _modelo) {
//Recibimos y seteamos el modelo y la aplicacion
this.modelo = _modelo;
this.aplicacion = _ap;
agregarEventos();
}
private void agregarEventos() {
/*
* Agregamos los eventos de la ventana y le inidicamos que este objeto sera su manejador
*/
this.aplicacion.menuItem.addActionListener(this);
this.aplicacion.menuItem.setActionCommand("abrirArchivo");
this.aplicacion.paletaDeColores.addActionListener(this);
this.aplicacion.paletaDeColores.setActionCommand("paletaDeColores");
this.aplicacion.tamanio1.addActionListener(this);
this.aplicacion.tamanio1.setActionCommand("tam1");
this.aplicacion.tamanio2.addActionListener(this);
this.aplicacion.tamanio2.setActionCommand("tam2");
this.aplicacion.fuente1.addActionListener(this);
this.aplicacion.fuente1.setActionCommand("fuente1");
this.aplicacion.fuente2.addActionListener(this);
this.aplicacion.fuente2.setActionCommand("fuente2");
this.aplicacion.fuente3.addActionListener(this);
this.aplicacion.fuente3.setActionCommand("fuente3");
}
@Override
public void actionPerformed(ActionEvent evento) {
/*
* Segun el evento ejecutamos la accion pertinente
*/
switch (evento.getActionCommand()) {
case "abrirArchivo":
this.modelo.abrirArchivo();
this.aplicacion.area.setText(this.modelo.texto);
this.aplicacion.labelContador.setText("Total de lineas ="+ this.modelo.getLineas());
break;
case "paletaDeColores":
this.aplicacion.area.setForeground(this.modelo.cambiarColor());
break;
case "tam1":
this.aplicacion.area.setFont(this.modelo.nuevaFuente(
this.aplicacion.area.getFont().toString(), 18));
tam = 18;
break;
case "tam2":
this.aplicacion.area.setFont(this.modelo.nuevaFuente(
this.aplicacion.area.getFont().toString(), 20));
tam = 20;
break;
case "fuente1":
this.aplicacion.area.setFont(this.modelo.nuevaFuente("Arial",tam));
break;
case "fuente2":
this.aplicacion.area.setFont(this.modelo.nuevaFuente("Times New Roman", tam));
break;
case "fuente3":
this.aplicacion.area.setFont(this.modelo.nuevaFuente("Monospaced", tam));
break;
}
}
}
- Creamos el modelo (nombre: Modelo)
package modelo;
import java.awt.Color;
import java.awt.Font;
import java.io.*;
import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
public class Modelo {
public String texto;
private int lineas;
private Color color;
private Font nuevaFuente;
private Font fuente;
public Modelo() {
}
public Color cambiarColor(){ //Metodo que retorna un color seleccionado a partir de un componente modal ColorChooser
JColorChooser ventanaDeColores = new JColorChooser();
color = ventanaDeColores.showDialog(null,"Seleccione un Color", Color.gray);
return color;
}
public String abrirArchivo() {
setLineas(0);
String aux = "";
texto = "";
try {
/** llamamos el metodo que permite cargar la ventana */
JFileChooser file = new JFileChooser(); //creamos nuestro buscador de archivos
file.showOpenDialog(null);
/** abrimos el archivo seleccionado */
File abre = file.getSelectedFile(); // creamos un archivo que contendra el archivo seleccionado en el buscador
/**
* recorremos el archivo, lo leemos para plasmarlo en el area de
* texto y para obtener el numero de lineas de codigo
*/
if (abre != null) {
FileReader archivos = new FileReader(abre);
BufferedReader lee = new BufferedReader(archivos);
while ((aux = lee.readLine()) != null) {
texto += aux + "\n";
lineas++;
setLineas(lineas);
}
lee.close();
}
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, ex + ""
+ "\nNo se ha encontrado el archivo", "ADVERTENCIA!!!",
JOptionPane.WARNING_MESSAGE);
}
return texto;// El texto se almacena en el JTextArea
}
/*
* Setter y getters
*/
public int getLineas() {
return lineas;
}
public void setLineas(int lineas) {
this.lineas = lineas;
}
/*
* Metodo para cambiar la fuente de la aplicacion
*
*/
public Font nuevaFuente(String font, int tamanio) {
nuevaFuente = new Font(font, Font.PLAIN, tamanio);
return nuevaFuente;
}
}
- Y finalmente creamos nuestro ejecutable (nombre: Main)
package ejecutable;
import controlador.Controlador;
import modelo.Modelo;
import aplicacion.Aplicacion;
public class Main {
public static void main(String[] args) {
Aplicacion aplicacion = new Aplicacion();
Modelo modelo = new Modelo();
/*
* Creamos y le pasamos como parametros al controlador la ventana y el modelo
*/
new Controlador(aplicacion, modelo);
}
}
Funcionando.. (http://oi60.tinypic.com/34pxl4g.jpg)
Buenisimo LKI.
Es una muy buena practicar el patrón mvc.
Saludos
Para los que estamos estudiando Java bastante interesante, codigo facilito, entendible y bien comentado.
Gracias.
Un Saludo.