Autor Tema: Java ejemplo ventanas Swing eventos de ratón mouse ActionListener JFrame JButton  (Leído 5573 veces)

ESOJ

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 143
    • Ver Perfil
Hola,

Aqui dejo un ejemplo de programa en el que se gestionan 3 cursos de Java.

Código: [Seleccionar]
package Ventanas;
import java.awt.BorderLayout;
import javax.swing.JFrame ;

public class JFramePrincipal extends JFrame
{   
    String titulo="";

    public  JFramePrincipal (String titulo)
    { 
        super(titulo);

        setLayout(new BorderLayout(0,0));
        setLocation(350, 20);
        setResizable(false);
        setVisible(true);
        setSize(770,700);           
    }   
}
Código: [Seleccionar]
package Ventanas;
import javax.swing.*;
import java.awt.*;

public class PanelCentro extends JPanel
{
    private JTextField temas[];
    private String[] tituloTemas;
    private int numeroDeTemas;
    private int colorPanelCentral=0;
    public PanelCentro (String[]tituloTemas,int numeroDeTemas,int colorPanelCentral){
        super();
        this.numeroDeTemas=numeroDeTemas;
        this.tituloTemas=tituloTemas;
        this.colorPanelCentral=colorPanelCentral;
        centro(tituloTemas,numeroDeTemas,colorPanelCentral);       
    } 

   public void centro (String[]tituloTemas,int numeroDeTemas,int colorPanelCentral){
        setLayout(new GridLayout(numeroDeTemas, 1));
        setBorder(BorderFactory.createLineBorder(Color.black));
        setBackground(Color.yellow);
       
        temas = new JTextField[numeroDeTemas];
        for (int i=0; i<numeroDeTemas; i++)
        {   temas[i] = new JTextField("     "+tituloTemas[i]);
            temas[i].setEditable(false);
            if (colorPanelCentral==1){
                temas[i].setBackground(Color.green);
                temas[i].setBorder(BorderFactory.createLineBorder(Color.black));
            temas[i].setFont(new Font("Arial", Font.BOLD, 15));}
            if (colorPanelCentral==2){
                temas[i].setBackground(Color.yellow);
                temas[i].setBorder(BorderFactory.createLineBorder(Color.black));
                temas[i].setFont(new Font("Arial", Font.BOLD, 25));}
            if (colorPanelCentral==3){
                temas[i].setBackground(Color.cyan);
                temas[i].setBorder(BorderFactory.createLineBorder(Color.yellow));}
            add(temas[i]);
        }
    }   
}
Código: [Seleccionar]
package Ventanas;
import javax.swing.*;
import java.awt.*;

public class  PanelOeste extends JPanel
{
    public PanelOeste()
    {
        super();       
    }
}
Código: [Seleccionar]
package Ventanas;
import javax.swing.*;
import java.awt.*;

public class PanelSur extends JPanel 
{
    public PanelSur(int numeroBotones){
        super();
        setLayout(new GridLayout(1,numeroBotones));
        setBorder(BorderFactory.createLineBorder(Color.black));
        setBackground(Color.cyan);
    } 
}
Código: [Seleccionar]
import Ventanas.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;

public class Portada extends JFramePrincipal implements  ActionListener
{
    private JButton[] botones;
    private JButton botonSurSalir,botonSurEmpezar;
    private String[] intro={"APRENDER A PROGRAMAR. Java desde cero",
            "APRENDER A PROGRAMAR. Java nivel avanzado I ","JEDI.Curso de Java"};
    private int numeroDeCurso=1;
    public Portada ()
    {  super("INDICE DE CURSOS");
       
        PanelOeste ventanaOeste = new PanelOeste();
        ventanaOeste.setLayout(new GridLayout(3,1));
        ventanaOeste.setBorder(BorderFactory.createLineBorder(Color.black));
        ventanaOeste.setBackground(Color.black);
        botones = new JButton[8];
        for (int i=1; i<=3; i++)

        {   botones[i] = new JButton(""+(i));
            ventanaOeste.add(botones[i]);
            botones[i].addActionListener(this);
        }

        PanelCentro ventanaCentro = new PanelCentro(intro,3,2);
        ventanaCentro.setBorder(BorderFactory.createLineBorder(Color.black));
        ventanaCentro.setBackground(Color.yellow);

        PanelSur ventanaSur = new PanelSur(1);
        botonSurSalir =new JButton("Salir");
        botonSurSalir.addActionListener(this);
        ventanaSur.add(botonSurSalir);

        add(ventanaCentro,BorderLayout.CENTER);
        add(ventanaSur,BorderLayout.SOUTH);
        add(ventanaOeste,BorderLayout.WEST);

    }

    public void actionPerformed(ActionEvent e){
        if(e.getActionCommand().equals("Salir") ) {setVisible(false);}
        for (int i=1;i<=3;i++){
            if(e.getActionCommand().equals(""+i) ) {numeroDeCurso=i;
                setVisible(false);new TemasCursos(numeroDeCurso);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ;}

        }
    }

    public static void main(String[] args) {
        new    Portada();}
}
Código: [Seleccionar]
public class TemasCursos
{
    String [ ] temasCursoAvanzado = {
            "PRINCIPALES CLASES DE UTILIDADES",
            "GESTIÓN DE EXCEPCIONES",
            "GESTIÓN DE LA ENTRADA/SALIDA EN JAVA",
            "INTRODUCCIÓN A LAS INTERFACES GRÁFICAS: AWT Y SWING. GESTIÓN DE EVENTOS",
            "INTRODUCCIÓN DESARROLLO DE SOFTWARE CON NETBEANS",
            "DESARROLLO AVANZADO CON NETBEANS",
            "GESTIÓN DE CONTROL DE VERSIONES",};
    String[] temasJavaDesdeCero = {"1 a 25","26 a 51","51 a 75","76 a 85"};
    String [ ] temasJedi = {"  Introduccion","  Estructuras basicas de programacion",
            "  Programacion orientada a objetos","  Excepciones","  Programacion grafica.El entorno Swing",
            "  Eventos","  El paradigma modelo-vista-controlador","  Applets","  Entrada/Salida:Streams",
            "  Epigrafe"};
    public TemasCursos(int numeroCurso)
    {
        if (numeroCurso==1){new IndiceCursos(temasJavaDesdeCero,4,1,"APRENDER JAVA DESDE CERO");}
        if (numeroCurso==2){new IndiceCursos(temasCursoAvanzado,7,2,"APRENDER JAVA.CURSO AVANZADO");}
        if (numeroCurso==3){new IndiceCursos(temasJedi,10,3,"JEDI.CURSO AVANZADO");}
    }

}
Código: [Seleccionar]
import Ventanas.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;

public class IndiceCursos extends JFramePrincipal implements  ActionListener
{
    private JButton[] botones;
    private JButton botonSur;
    private String[] tituloTemas={};
    int numeroCurso;
    String [ ] capitulos = { };
    public IndiceCursos (String[] capitulos,int xBotones,int numeroCurso,String titulo)
    {  super(titulo);
        this.numeroCurso=numeroCurso;
        this.capitulos=capitulos;
        PanelOeste ventanaOeste = new PanelOeste();
        ventanaOeste.setLayout(new GridLayout(xBotones,1));
        ventanaOeste.setBorder(BorderFactory.createLineBorder(Color.black));
        ventanaOeste.setBackground(Color.black);
        botones = new JButton[xBotones+1];
        for (int i=1; i<=xBotones; i++)

        {   botones[i] = new JButton(""+(i));
            ventanaOeste.add(botones[i]);
            botones[i].addActionListener(this);
        }

        PanelCentro ventanaCentro = new PanelCentro(capitulos,xBotones,1);

        PanelSur ventanaSur = new PanelSur(1);
        botonSur =new JButton("Atras");
        ventanaSur.add(botonSur);
        botonSur.addActionListener(this);

        add(ventanaOeste,BorderLayout.WEST);
        add(ventanaCentro,BorderLayout.CENTER);
        add(ventanaSur,BorderLayout.SOUTH);
    }

    public void actionPerformed(ActionEvent e){

        if(e.getActionCommand().equals("Atras") ) {setVisible(false);new Portada();}
        for (int i=1;i<=13;i++){int numerodeIndice=i;
            if(e.getActionCommand().equals(""+i) ) {setVisible(false);new SubTemasCursos(numeroCurso,numerodeIndice);}
        }
    }
}

Código: [Seleccionar]
public class GestorTemasCursos
{

    public GestorTemasCursos(int numeroCurso,int numeroIndice,String[] []temasDesdeCero,String[] []temasAvanzado,String[][] temasJedi)
    {
        int numeroBotones=0;
        int y=0;
        switch (numeroCurso){
            case 1: {
                switch (numeroIndice){
                    case 1: {numeroBotones=25;break;}
                    case 2: {numeroBotones=25;break;}
                    case 3: {numeroBotones=25;break;}
                    case 4: {numeroBotones=10;break;}
                }
                new GestorDeSubTemas(temasDesdeCero[numeroIndice-1],numeroBotones,numeroIndice-1,"APRENDER JAVA DESDE CERO",2);
                break;}

            case 2:{
                switch (numeroIndice){
                    case 1: {numeroBotones=15;break;}
                    case 2: {numeroBotones=9;break;}
                    case 3: {numeroBotones=5;break;}
                    case 4: {numeroBotones=17;break;}
                }
                new GestorDeSubTemas(temasAvanzado[numeroIndice-1],numeroBotones,numeroIndice-1,"APRENDER JAVA.CURDO AVANZADO",1);
                break; }

            case 3: {
                switch (numeroIndice){
                    case 1: {numeroBotones=4;break;}
                    case 2: {numeroBotones=13;break;}
                    case 3: {numeroBotones=4;break;}
                    case 4: {numeroBotones=3;break;}
                    case 5: {numeroBotones=3;break;}
                    case 6: {numeroBotones=3;break;}
                    case 7: {numeroBotones=2;break;}
                    case 8: {numeroBotones=8;break;}
                    case 9: {numeroBotones=9;break;}
                    case 10: {numeroBotones=4;break;}
                }         

                new GestorDeSubTemas(temasJedi[numeroIndice-1],numeroBotones,numeroIndice-1,"JEDI.CURSO AVANZADO",3);
                break;}
        }
    }
}
Código: [Seleccionar]
import Ventanas.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.io.IOException;
public class GestorDeSubTemas extends JFramePrincipal implements  ActionListener
{
    private JButton botonSur;
    private JButton[] botones;
    private String[] tituloTemas={};
    private int numeroBotones,carpetaTemas;
    private int temario;
    String ruta,titulo;
    public GestorDeSubTemas (String [] tituloTemas,int numeroBotones,int carpetaTemas,String titulo,int temario)
    {  super(titulo);
        this.temario=temario;
        this.tituloTemas=tituloTemas;
        this.numeroBotones=numeroBotones;
        this.carpetaTemas=carpetaTemas;
        this.titulo=titulo;
        PanelOeste ventanaOeste = new PanelOeste();
        ventanaOeste.setLayout(new GridLayout(numeroBotones,1));
        ventanaOeste.setBorder(BorderFactory.createLineBorder(Color.black));
        ventanaOeste.setBackground(Color.yellow);
        botones = new JButton[numeroBotones+1];
        for (int i=1; i<=numeroBotones; i++)

        {   botones[i] = new JButton(""+(i));
            ventanaOeste.add(botones[i]);
            botones[i].addActionListener(this);
        }

        PanelCentro ventanaCentro = new PanelCentro(tituloTemas,numeroBotones,3);

        PanelSur ventanaSur = new PanelSur(1);
        botonSur =new JButton("Atras");
        ventanaSur.add(botonSur);
        botonSur.addActionListener(this);

        add(ventanaOeste,BorderLayout.WEST);
        add(ventanaCentro,BorderLayout.CENTER);
        add(ventanaSur,BorderLayout.SOUTH);
    }

    public void Archivo (String archivo){
        try {
            Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + archivo);
        } catch (IOException a) {
            a.printStackTrace();
        }
    }

    public void actionPerformed(ActionEvent e){
        if (temario==1){ruta="AVANZADO/";}
        if (temario==2){ruta="JAVADESDECERO/";}
        if (temario==3){ruta="JEDI/";}
        String[] tema={"TEMA1/","TEMA2/","TEMA3/","TEMA4/","TEMA5/","TEMA6/","TEMA7/","TEMA8/","TEMA9/","TEMA10/"};
        String[] capitulo={"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25"};
        int i=0;
        for (i=1; i<numeroBotones+1; i++){
            if(e.getActionCommand().equals(""+i) ) {
                Archivo("C:/Users/Pc/Desktop/JAVA/PROGRAMAS/APRENDER A PROGRAMAR II/"+ruta+tema[carpetaTemas]+capitulo[i-1]+".rtf");}
        }
        if(e.getActionCommand().equals("Atras") ) {setVisible(false);
            if (titulo.equals("APRENDER JAVA DESDE CERO")){new TemasCursos(1);}
            if (titulo.equals("APRENDER JAVA.CURDO AVANZADO")){new TemasCursos(2);}
            if (titulo.equals("JEDI.CURSO AVANZADO")){new TemasCursos(3);}
        }
    }
}
Código: [Seleccionar]
public class SubTemasCursos
{   //pongo los titulos de los temas con numero por cuestion de espacio para publicarlo
    String[] tema1 = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"};
    String[] tema2 = {"1","2","3","4","5","6","7","8","9"};
    String[] tema3 = {"1","2","3","4","5"};
    String[] tema4 = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"};

    String[] temas1a25 = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17",
        "18","19","20","21","22","23","24","25"};
    String[] temas26a50 = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17",
        "18","19","20","21","22","23","24","25"};
    String[] temas51a75 = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17",
        "18","19","20","21","22","23","24","25"};
    String[] temas76a85 = {"1","2","3","4","5","6","7","8","9","10"};
    String [ ] introduccion = {"1","2","3","4"};
    String [ ] estructurasBasicas = {"1","2","3","4","5","6","7","8","9","10","11","12","13"};
    String [ ] progOrientada = {"1","2","3","4"};
    String [ ] excepciones = {"1","2","3"};   
    String[] programacionGrafica={"1","2","3"};
    String [ ] eventos = {"1","2","3"};
    String [ ] paradigma ={"1","2"} ;     
    String [ ] applets={"1","2","3","4","5","6","7","8"} ;
    String[]entradaSalida={"1","2","3","4","5","6","7","8","9"};
    String[]epigrafe={"1","2","3","4"};
   
    String[] []temasJedi={introduccion,estructurasBasicas,progOrientada,excepciones,programacionGrafica,eventos,paradigma,applets,entradaSalida,epigrafe}; 
    String[] []temasDesdeCero={temas1a25,temas26a50,temas51a75,temas76a85};
    String[] []temasAvanzado={tema1,tema2,tema3,tema4};
    public SubTemasCursos(int numeroCurso,int numeroIndice)
    {
        new GestorTemasCursos(numeroCurso,numeroIndice,temasDesdeCero,temasAvanzado,temasJedi);
    }
}
« Última modificación: 24 de Marzo 2016, 14:43 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2053
    • Ver Perfil
Hola ESOJ lo he probado y lo veo muy buen código como ejercicio. Una vez se llega a los temas ya no se muestra el contenido, supongo que lo has hecho para no incluir todos los textos.

En este caso la navegación resulta amigable ya que en vez de abrirse diferentes ventanas el usuario solo tiene que trabajar con una ventana y esto facilita el uso del programa

He comprobado que en algunos casos salta un error: en concreto siguiendo estos pasos me salta un error

Iniciamos el programa
Elegimos Aprender a programar Java nivel avanzado I
Elegimos 3 gestión de la entrada salida
Pulso el botón 4
Pulso atrás
Pulso 6 desarrollo avanzado con Netbeans

Me salta el siguiente error:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 5
   at GestorTemasCursos.<init>(GestorTemasCursos.java:26)
   at SubTemasCursos.<init>(SubTemasCursos.java:31)
   at IndiceCursos.actionPerformed(IndiceCursos.java:45)
   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
   ...
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Saludos

ESOJ

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 143
    • Ver Perfil
Hola.
Gracias por el tiempo dedicado y por tus recomendaciones.
Sobre el error,la parte del membrana no esta terminada. Los temas del netbeans aun no llegan a ninguna parte. Se me olvido indicarlo, lo siento .

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2053
    • Ver Perfil
Bueno no te preocupes lo importante es que estás siendo capaz de crear buenos códigos haciendo usos de elementos de programación relativamente avanzada y manejando bien el diseño orientado a objetos.

Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".