JOptionPane con varios botones en cada línea?

Cómo se podría ir sobre la visualización de un JOptionPane.showinputDialog() con múltiples JButtons en cada línea? Yo no estoy hablando de la Yes, No, Cancel botones pero personalizado múltiple etiquetado JButtons que se muestra en el área de contenido de JOptionPane.showinputDialog?

por lo que tendría que obtener el valor del botón pulsado de la JOptionPane así.

InformationsquelleAutor KJW | 2011-12-28

3 Kommentare

  1. 6

    Puede colocar cualquier JComponents a la JOptionPane, allí no puedo ver ningún tipo de límites, JOptionPane es el mismo Contenedor De Nivel Superior como JFrame, JDialog o JWindow, pero en contraste con la llanura Top-Level Containers, JOptionPane ha implementado eventos de devolución incorporado funcionalidades en Integer valor, significado de los botones de YES, NO, OK, CANCEL y CLOSE demasiado,

    poner todos los JButtons a la Matriz

    String[] buttons = { "Yes", "Yes to all", "No", "Cancel".... };    
    int returnValue = JOptionPane.showOptionDialog(null, "Narrative", "Narrative",
            JOptionPane.WARNING_MESSAGE, 0, null, buttons, buttons[i]);
    System.out.println(returnValue);
    • el problema con esto es que mi aplicación parece que se bloquea cuando el joption muestra….como es transparente, y la aplicación se bloquea en esta línea.
    • hay tres cuestiones 1) que el código para brinking JOptionPane es de EDT (usted solo puede ver de la barra de herramientas con el botón cerrar), 2) código de brinking JOptionPane está vinculado/miss_linked a instancia null, 3) JOptionPane fue desechada, a continuación, int retorno NPE, y ahora tienes dos opciones a) editar este tema con el código que la demostración de congelación, b) crear un nuevo post c) tal vez hay/es otro de los temas sobre
    • me fijo por el uso de invokeLater(). bueno el problema que ahora tengo es que los botones que aparecen al lado, no uno por cada nueva línea.
    • Jong Woo maaaan ¿qué debe hacer 🙂
    • pensé botones que aparecen en cada nueva línea. que no es el caso.
    • Jong Woo mucha suerte con eso

  2. 5

    Esto es lo más cercano a wat quieres como yo puede conseguir.

    Object[] colours = {"Blue", "Red", "Black", "White"};
    
    int n = JOptionPane.showOptionDialog(null,
        "Which colour do you like?",
        "Choose a colour",
        JOptionPane.DEFAULT_OPTION,
        JOptionPane.QUESTION_MESSAGE,
        null,
        colours,
        colours[0]);
    
    System.out.println("The users likes " + colours[n]);
    • mismo problema, la aplicación se bloquea en esta línea. el joptionpane ventana de muestra, pero ninguno de los dioalog contenido de la muestra.
  3. 1

    Quería botones en líneas separadas? He aquí una manera de conseguir que el uso de JOptionPane. En este ejemplo, el texto del botón pulsado se utiliza como el panel del valor de entrada. Esto se realiza por la acción creado en createChoiceAction(). El multi-botón de línea del panel se convierte en el «mensaje» que figura en el JOptionPane constructor.

    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import java.util.List;
    import javax.swing.*;
    
    
    public class JOptionPaneExample {
        public static final String DIALOG_NAME = "what-dialog";
        public static final String PANE_NAME = "what-pane";
    
        private void showDialog() {
            JOptionPane pane = new JOptionPane(createInputComponent());
            pane.setName(PANE_NAME);
            JDialog dialog = pane.createDialog("What?");
            dialog.setName(DIALOG_NAME);
            dialog.setSize(400, 400);
            dialog.setVisible(true);
            System.out.println(pane.getInputValue());
            System.exit(0);
        }
    
        private JComponent createInputComponent() {
            JPanel p = new JPanel(new BorderLayout());
            p.add(new JLabel("Pick a Category:"), BorderLayout.NORTH);
    
            Box rows = Box.createVerticalBox();
            ActionListener chooseMe = createChoiceAction();
    
            Map<String, List<String>> inputs =
                    new LinkedHashMap<String, List<String>>();
            inputs.put("Cars:", Arrays.asList("Toyota", "Honda", "Yugo"));
            inputs.put("Phones:", Arrays.asList("iPhone", "Android", "Rotary"));
            inputs.put("Pets:", Arrays.asList("Dog", "Cat", "Sock"));
    
            for (String category : inputs.keySet()) {
                JPanel b = new JPanel(new FlowLayout(FlowLayout.LEADING));
                b.add(new JLabel(category));
    
                for (String choice : inputs.get(category)) {
                    JButton button = new JButton(choice);
                    button.addActionListener(chooseMe);
                    b.add(button);
                }
                rows.add(Box.createVerticalStrut(10));
                rows.add(b);
            }
    
            rows.add(Box.createVerticalStrut(600));
    
            p.add(rows, BorderLayout.CENTER);
            return p;
        }
    
        private ActionListener createChoiceAction() {
            ActionListener chooseMe = new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    JButton choice = (JButton) e.getSource();
    
                    //find the pane so we can set the choice.
                    Container parent = choice.getParent();
                    while (!PANE_NAME.equals(parent.getName())) {
                        parent = parent.getParent();
                    }
    
                    JOptionPane pane = (JOptionPane) parent;
                    pane.setInputValue(choice.getText());
    
                    //find the dialog so we can close it.
                    while ((parent != null) &&
                            !DIALOG_NAME.equals(parent.getName()))
                    { parent = parent.getParent(); }
    
                    if (parent != null) {
                        parent.setVisible(false);
                    }
                }
            };
            return chooseMe;
        }
    
        public static void main(String[] args) {
            JOptionPaneExample main = new JOptionPaneExample();
            main.showDialog();
        }
    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea