Как мне вывести только часть массива с помощью JOptionPane?

#java #arrays #swing #joptionpane

#java #массивы #swing #joptionpane

Вопрос:

У меня возникли трудности с выводом только части массива в JOptionPane.showOptionDialog() . У меня есть запрос пользователя, запрашивающий целое число от 1 до 10, и я хотел бы вывести это количество элементов из массива.

 options = JOptionPane.showInputDialog("How many options would you like?" 
                        "nnPlease note that you must input a number between 1-10");

try{
    numberofoptions = Integer.parseInt(options);
}
catch(NumberFormatException e){
    JOptionPane.showMessageDialog(null, "Remember to only input a numerical integer");
}

JOptionPane.showOptionDialog(null, "Please select a restaurant.", "Restaurant Selector",
    JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, Restaurants, Restaurants[0]);

exit = JOptionPane.showConfirmDialog(null, "Do you wish to continue?", "Restaurant Selector", 
        JOptionPane.YES_NO_OPTION);
  

Комментарии:

1. что вы на самом деле хотите отобразить, все n вариантов в одной JOptionPane или JOptionPane для каждого

2. Все n параметров в одной панели, я разобрался с этим самостоятельно. Это было просто задание для моего введения в класс Java.

Ответ №1:

Вы могли бы использовать Arrays.copyOf метод, чтобы получить первые n рестораны:

 import java.util.Arrays;
import javax.swing.*;

public class ArraySubset {
    public static void main(String[] arguments) {
        SwingUtilities.invokeLater(() -> new ArraySubset().createAndShowGui());
    }

    private void createAndShowGui() {
        JFrame frame = new JFrame("Stack Overflow: part of an array");
        frame.setBounds(100, 100, 800, 600);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        JButton button = new JButton("Let's pick a restaurant");
        button.addActionListener(actionEvent -> pickRestaurant());
        panel.add(button);
        frame.getContentPane().add(panel);

        frame.setVisible(true);
    }

    private void pickRestaurant() {
        String[] allRestaurants = {
                "Restaurant 1", "Restaurant 2", "Restaurant 3", "Restaurant 4", 
                "Restaurant 5", "Restaurant 6", "Restaurant 7", "Restaurant 8", 
                "Restaurant 9", "Restaurant 10"
        };

        int numberOfOptions = allRestaurants.length;

        try {
            String messageNumberOfOptions = "How many options would you like?"  
                                            "nnPlease note that you must input "  
                                            "a number between 1-10";

            String options = JOptionPane.showInputDialog(messageNumberOfOptions);

            numberOfOptions = Integer.parseInt(options);
        }
        catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(null, 
                                          "Remember to only input a numerical integer");
        }

        String[] someRestaurants = Arrays.copyOf(allRestaurants, numberOfOptions);

        JOptionPane.showOptionDialog(null, "Please select a restaurant.", 
                                     "Restaurant Selector",
                                     JOptionPane.YES_NO_OPTION, 
                                     JOptionPane.QUESTION_MESSAGE, 
                                     null,
                                     someRestaurants, someRestaurants[0]);

        int exit = JOptionPane.showConfirmDialog(null, "Do you wish to continue?",
                                                 "Restaurant Selector",
                                                 JOptionPane.YES_NO_OPTION);

        System.out.println("exit: "   exit);
    }
}