1

I can't figure out how to write a code for the main method, so that I would be able to store the selections of Months made by user in the String[] stringValues. This is my class MultipleIntervalSelection:

package february;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MultipleIntervalSelection extends JFrame
{
   private JList monthList;           // List of months
   private JList selectedMonthList;   // Selected months
   private JButton button;            // To get selected items
   private JPanel monthPanel;         // To hold components
   private JPanel selectedMonthPanel; // To hold components
   private JPanel buttonPanel;        // To hold the button


   // The following array holds the values that will be
   // displayed in the monthList list component.
   private String[] months = { "January", "February", "March",
            "April", "May", "June", "July", "August",
            "September", "October", "November", "December" };
   /**
    *  Constructor
    */
   public MultipleIntervalSelection()
   {
      // Call the JFrame constructor.
      super("List Demo");

      // Specify an action for the close button.
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      // Create a BorderLayout manager for the content pane.
      setLayout(new BorderLayout());

      // Build the panels.
      buildMonthPanel();
      buildSelectedMonthsPanel();
      buildButtonPanel();

      // Add the panels to the content pane.
      add(monthPanel, BorderLayout.NORTH);
      add(selectedMonthPanel, BorderLayout.CENTER);
      add(buttonPanel, BorderLayout.SOUTH);

      // Pack and display the window.
      pack();
      setVisible(true);
   }

   /**
    *  The buildMonthPanel method adds a list containing the
    *  names of the months to a panel.
    */

   private void buildMonthPanel()
   {
      // Create a panel to hold the list.
      monthPanel = new JPanel();

      // Create the list.
      monthList = new JList(months);

      // Set the list to multiple interval selection mode.
      monthList.setSelectionMode(
          ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

      // Set the number of visible rows to 6.
      monthList.setVisibleRowCount(6);

      // Add the list to a scroll pane.
      JScrollPane monthListScrollPane = 
                         new JScrollPane(monthList);

      // Add the scroll pane to the panel.
      monthPanel.add(monthListScrollPane);
   }

   /**
    *  The buildSelectedMonthsPanel method adds a list to
    *  a panel. This will hold the selected months.
    */

   private void buildSelectedMonthsPanel()
   {
      // Create a panel to hold the list.
      selectedMonthPanel = new JPanel();

      // Create the list.
      selectedMonthList = new JList();

      // Set the number of visible rows to 6.
      selectedMonthList.setVisibleRowCount(6);

      // Add the list to a scroll pane.
      JScrollPane selectedMonthScrollPane =
                     new JScrollPane(selectedMonthList);

      // Add the scroll pane to the panel.
      selectedMonthPanel.add(selectedMonthScrollPane);
   }

   /**
    *  The buildButtonPanel method adds a button to a panel.
    */

   private void buildButtonPanel()
   {
      // Create a panel to hold the button.
      buttonPanel = new JPanel();

      // Create the button.
      button = new JButton("Get Selections");

      // Add an action listener to the button.
      button.addActionListener(new ButtonListener());

      // Add the button to the panel.
      buttonPanel.add(button);
   }

   /**
    *  Private inner class that handles the event when
    *  the user clicks the "Get Selections" button.
    */

   private class ButtonListener implements ActionListener
   {
      public void actionPerformed(ActionEvent e)
      {
         // Get all the items that were selected. 
         Object[] selections = monthList.getSelectedValues();

         // Display the items in selectedMonthList.
         selectedMonthList.setListData(selections);
      }


 private void getValues()
   {
      Object months;
      months  =  monthList.getSelectedValues();
      return months;
     }
   }
 }

The following is my main class:

package february;

public class Alert { 

    public static void main(String[] args)  {
        MultipleIntervalSelection monthsInterval = new MultipleIntervalSelection();
        monthsInterval.setVisible(true);
         Object months = monthsInterval.getValues();
         String[] stringValues = (String[])months;
         System.out.println(stringValues);
    }
}

The main method would execute, but there is no result in the console. I need the names (String values) of the months that were chosen by the user be saved in my String[] stringValues. Please, anybody, help mest

4

2 回答 2

3

You have two options. Instead of using a JFrame you could use a JDialog.

A modal dialog will stop your programs execution at the the point it is made visible until it is closed.

Dialog

The other option is to use JOptionPane, which is significantly simpler...

JOptionPane

public class TestOption {

    public static void main(String[] args) {
        new TestOption();
    }

    public TestOption() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                DialogPane dialogPane = new DialogPane();
                JDialog dialog = new JDialog((Frame) null, "Testing", true);
                dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                dialog.setLayout(new BorderLayout());
                dialog.add(dialogPane);
                dialog.pack();
                dialog.setLocationRelativeTo(null);
                dialog.setVisible(true);

                List<String> values = dialogPane.getValues();

                MultipleIntervalSelection options = new MultipleIntervalSelection();
                int result = JOptionPane.showConfirmDialog(null, options, "Options", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
                if (result == JOptionPane.OK_OPTION) {
                    values = options.getValues();
                }
            }
        });
    }

    public class DialogPane extends JPanel {

        private MultipleIntervalSelection options;
        private boolean okay = false;

        public DialogPane() {

            setLayout(new BorderLayout());

            options = new MultipleIntervalSelection();
            add(options);

            JButton btnOkay = new JButton("Okay");
            JButton btnCancel = new JButton("Cancel");

            JPanel actions = new JPanel();
            actions.add(btnOkay);
            actions.add(btnCancel);

            add(actions, BorderLayout.SOUTH);

            btnOkay.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    okay = true;
                    dispose();
                }

            });
            btnCancel.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    okay = false;
                    dispose();
                }

            });

        }

        protected void dispose() {
            SwingUtilities.getWindowAncestor(this).dispose();
        }

        public List<String> getValues() {

            return options.getValues();

        }

    }

    public class MultipleIntervalSelection extends JPanel {

        private JList monthList;           // List of months
        private JList selectedMonthList;   // Selected months
        private JPanel monthPanel;         // To hold components
        private String[] months = {"January", "February", "March",
                                                             "April", "May", "June", "July", "August",
                                                             "September", "October", "November", "December"};

        /**
         * Constructor
         */
        public MultipleIntervalSelection() {
            // Create a BorderLayout manager for the content pane.
            setLayout(new BorderLayout());

            // Build the panels.
            buildMonthPanel();

            // Add the panels to the content pane.
            add(monthPanel, BorderLayout.NORTH);
        }

        /**
         * The buildMonthPanel method adds a list containing the names of the months
         * to a panel.
         */
        private void buildMonthPanel() {
            // Create a panel to hold the list.
            monthPanel = new JPanel(new BorderLayout());

            // Create the list.
            monthList = new JList(months);

            // Set the list to multiple interval selection mode.
            monthList.setSelectionMode(
                            ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

            // Set the number of visible rows to 6.
            monthList.setVisibleRowCount(6);

            // Add the list to a scroll pane.
            JScrollPane monthListScrollPane =
                            new JScrollPane(monthList);

            // Add the scroll pane to the panel.
            monthPanel.add(monthListScrollPane);
        }

        public List<String> getValues() {
            List<String> months;
            months = monthList.getSelectedValuesList();
            return months;
        }
    }
}
于 2013-02-14T09:53:25.920 回答
1

JDialog is helpful, but you can use JFrame either. Here is the code I wrote for you:

  @SuppressWarnings("serial")
    public class Window extends JFrame {

        // Fields
        // specify here all private fields that you want in you application like JLabels etc...
        private JList monthsList;
        private String[] months = {"January", "February", "March" , "April", "May", "June", "July", "August", "September", "October", "November", "December"};

        // no args constructor
        public Window() {
            createUI();
        }
        @SuppressWarnings({ "unchecked", "rawtypes" })
        private void createUI() {
            Container contentPane = getContentPane();
            contentPane.setLayout(null);

            // Months Selection
            monthList = new JList(months);
            monthList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
            monthList.setVisibleRowCount(5);
            monthList.setBounds(400, 16, 100, 50);
            JScrollPane monthScroll = new JScrollPane(monthsList);
            monthScroll.setBounds(180, 16, 135, 400);
            contentPane.add(monthsScroll);


            // set the content Pane window
            setTitle("Months");
            setSize(100,100);
            setVisible(true);

            }

        public void buttonActionPerformed(ActionEvent event) {

            this.buttonPressed = true;

            @SuppressWarnings("deprecation")
            Object[] monthObjects = monthsList.getSelectedValues();
            this.monthsSelected = Arrays.copyOf(monthObjects,monthObjects.length, String[].class);

            }

        // Method to diagnose Start button clicked to use in the Main
        public boolean VerifyButtonPressed() {

            return buttonPressed == true ? true : false;

        }

        // Methods to set the user specified value to the CurrentInput class fields

        public String[] getMonthsSelected() {
            return monthsSelected;
        }


    }

Also, create a main class that will use the "public boolean VerifyButtonPressed()". This is the easiest way you can do the same work without JDialog.

于 2013-03-18T17:45:16.250 回答