Foro de elhacker.net

Programación => Java => Mensaje iniciado por: alfrosende en 21 Marzo 2015, 12:50 pm



Título: JOptionPane extendido
Publicado por: alfrosende en 21 Marzo 2015, 12:50 pm
Hola a todos, soy nuevo en el foro y bastante nuevo en Java tambien (actualmente aprendiendo). Estoy haciendo un proyecto simplon de una grilla que recibe datos mediante una BD en MySQL y realiza operaciones de mantenimiento sencillas. La llevo bastante bien, pero lo que me trae a preguntarles es una funcionalidad que quiero darle a un JOptionPane y para ello me gustaria hacer uno propio (extendido) que haga lo que quiero.
La idea es que mi JOptionPane que captura errores en un catch (hoy mi codigo es JOptionPane.showMessageDialgo(null,ex.getMessage(),"Error",JOptionPane.ERROR_MESSAGE)) tenga un boton extra que diga "Detalles", y al hacer click sobre ese boton me muestre el printstacktrace del catch.
Me podrian orientar como hacerlo??, estoy un poco perdido en como extenderlo, no se como agregar un boton al control, ni como reaccionar al click en dicho boton. Aparte de ello, si se pudiera hacer que en vez de mostrar esos detalles en un popup se muestre en el mismo JOptionPane agrandando el area del mismo por debajo mejor todavia.

Desde ya muchisimas gracias a todo aquel que pueda ayudarme. De mas esta decir que tampoco quiero el codigo hecho, sino algun ejemplo como para arrancar y alguna orientacion. Saludos a toda la comunidad.


Título: Re: JOptionPane extendido
Publicado por: Usuario Invitado en 21 Marzo 2015, 17:10 pm
Hola alfrosende, buen día,

Lo mejor para lo que deseas hacer es no extender de JOptionPane. Una razón es que si el rastreo de pila es muy grande el JOptionPane lo será también. Aquí habría que usar JScrollPane que englobe por ejemplo un JTextArea para mostrar el rastreo con barras de desplazamiento.

Lo mejor es que hagas tu propio "Error dialog". Yo simplemente lo haría con un pequeño JPanel de pequeñas dimensiones en el cual hayan los siguientes elementos:

  • Label para el título del error.
  • JPanel que contendrá el JTextArea donde se mostrará el error.

He creado un ejemplo práctico para que veas cómo se hace.



UPDATE


El código fuente lo pueden encontrar desde mi Github: JErrorDialog (https://github.com/GusGarsaky/JErrorDialog)

Es un JDialog en donde se muestra el rastreo de pila. Tiene sobrecarga de constructor y además métodos para agregar la Excepción, titulo del diálogo y el texto informativo de la excepción.

Una imagen de cómo queda:

(http://i.imgur.com/j2yXWFs.png)


MODO DE USO



Vas a instanciar a JErrorDialog y le pasas los siguientes parámetros:

  • El padre (JFrame o Frame, para Frame no estoy seguro si corre bien)
  • El título de la ventana
  • La información de la excepción
  • La excepción
Código
  1. JErrorDialog dialog = new JErrorDialog(this);
  2. dialog.setTitle("Something was wrong"); // window title
  3. dialog.setInfo("Error converting String to Integer"); // error info
  4. dialog.setException(e); // Exception
  5. dialog.showDialog(); // build and show the dialog

O de la manera rápida:

Código
  1. new JErrorDialog(this, "Something was wrong", "Error converting String to Integer", e).showDialog();


Si desean bajar el JAR para usarlo directamente, puede descargarlo desde AQUÍ (https://www.dropbox.com/s/4br8ehei83o8jvr/JErrorDialog_0.1.jar?dl=0)


Saludos.


Título: Re: JOptionPane extendido
Publicado por: alfrosende en 22 Marzo 2015, 13:45 pm
Gus increiblemente util tu respuesta, ya estoy analizando el codigo y adapatandolo a mis necesidades. Muy agradecido realmente!!!!!


Título: Re: JOptionPane extendido
Publicado por: Usuario Invitado en 22 Marzo 2015, 23:22 pm
De nada. Te recomiendo ir trasteando con JavaFX para que trabajes mejor. Swing ya fue.

Saludos.


Título: Re: JOptionPane extendido
Publicado por: alfrosende en 23 Marzo 2015, 22:56 pm
Si sabes que leyendo el foro (estoy recien aprendiendo java y trato de leer todo lo que puedo) vi un tema donde hacian una pregunta sobre mejorar el diseño de una gui y tu le recomendabas javaFX ... busque alguna cosa y me puse a leer pero todavia estoy lejos, jeje, pero estoy intentando empaparme de ese tema, gracias