编写主要方法问题。 Java GUI列表

时间:2013-02-14 06:12:30

标签: java swing list user-interface main

我无法弄清楚如何为main方法编写代码,这样我就可以在String [] stringValues中存储用户所做的Months选择。这是我的类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;
     }
   }
 }

以下是我的主要课程:

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);
    }
}

主要方法将执行,但控制台中没有结果。我需要将用户选择的月份的名称(字符串值)保存在我的String [] stringValues中。请任何人帮助我,

2 个答案:

答案 0 :(得分:3)

您有两种选择。您可以使用JFrame

,而不是使用JDialog

模态对话框将停止程序执行,直到它被关闭为止。

Dialog

另一种选择是使用JOptionPane,这显然更简单......

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;
        }
    }
}

答案 1 :(得分:1)

JDialog很有帮助,但您也可以使用JFrame。这是我为你写的代码:

  @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;
        }


    }

另外,创建一个将使用“public boolean VerifyButtonPressed()”的主类。这是在没有JDialog的情况下完成相同工作的最简单方法。