ventana sirve showmessagedialog showinputdialog que personalizar para mostrar mensaje error emergente ejemplos java swing jframe jdialog joptionpane

sirve - Java-¿Cómo crear un cuadro de diálogo personalizado?



personalizar joptionpane (6)

Bueno, esencialmente creas un JDialog, agregas tus componentes de texto y lo haces visible. Puede ser útil si reduce el bit específico con el que está teniendo problemas.

Tengo un botón en un JFrame que, al hacer clic, quiero que aparezca un cuadro de diálogo emergente con varias áreas de texto para que el usuario ingrese. He estado mirando alrededor para tratar de descubrir cómo hacerlo, pero me sigo confundiendo. ¿Alguien puede ayudar?



Pruebe esta clase simple para personalizar un diálogo a su gusto:

import java.util.ArrayList; import java.util.List; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JRootPane; public class CustomDialog { private List<JComponent> components; private String title; private int messageType; private JRootPane rootPane; private String[] options; private int optionIndex; public CustomDialog() { components = new ArrayList<>(); setTitle("Custom dialog"); setMessageType(JOptionPane.PLAIN_MESSAGE); setRootPane(null); setOptions(new String[] { "OK", "Cancel" }); setOptionSelection(0); } public void setTitle(String title) { this.title = title; } public void setMessageType(int messageType) { this.messageType = messageType; } public void addComponent(JComponent component) { components.add(component); } public void addMessageText(String messageText) { JLabel label = new JLabel("<html>" + messageText + "</html>"); components.add(label); } public void setRootPane(JRootPane rootPane) { this.rootPane = rootPane; } public void setOptions(String[] options) { this.options = options; } public void setOptionSelection(int optionIndex) { this.optionIndex = optionIndex; } public int show() { int optionType = JOptionPane.OK_CANCEL_OPTION; Object optionSelection = null; if(options.length != 0) { optionSelection = options[optionIndex]; } int selection = JOptionPane.showOptionDialog(rootPane, components.toArray(), title, optionType, messageType, null, options, optionSelection); return selection; } public static String getLineBreak() { return "<br>"; } }


Si usa NetBeans IDE (la última versión en este momento es 6.5.1), puede usarla para crear una aplicación Java GUI básica usando Archivo-> Proyecto nuevo y elija la categoría Java y luego la Aplicación Java Desktop.

Una vez creado, tendrá una aplicación GUI simple que contiene un cuadro de acercamiento que se puede abrir usando una selección de menú. Debería poder adaptar esto a sus necesidades y aprender cómo abrir un diálogo desde un clic de botón.

Podrá editar el diálogo visualmente. Elimine los elementos que están allí y agregue algunas áreas de texto. Juega con él y vuelve con más preguntas si te quedas atascado :)


Esta lección del tutorial de Java explica cada componente de Swing en detalle, con ejemplos y enlaces de API.


Si no necesita mucho en cuanto a comportamiento personalizado, JOptionPane es un buen ahorro de tiempo. Se encarga de la ubicación y localización de las opciones Aceptar / Cancelar, y es una forma rápida y sucia de mostrar un cuadro de diálogo personalizado sin necesidad de definir sus propias clases. La mayoría de las veces, el parámetro "mensaje" en JOptionPane es una Cadena, pero también puede pasar un JComponent o una matriz de JComponents.

Ejemplo:

JTextField firstName = new JTextField(); JTextField lastName = new JTextField(); JPasswordField password = new JPasswordField(); final JComponent[] inputs = new JComponent[] { new JLabel("First"), firstName, new JLabel("Last"), lastName, new JLabel("Password"), password }; int result = JOptionPane.showConfirmDialog(null, inputs, "My custom dialog", JOptionPane.PLAIN_MESSAGE); if (result == JOptionPane.OK_OPTION) { System.out.println("You entered " + firstName.getText() + ", " + lastName.getText() + ", " + password.getText()); } else { System.out.println("User canceled / closed the dialog, result = " + result); }