正在编写Main方法问题。Java图形用户界面列表

2022-05-31 00:00:00 list user-interface main java swing

我想不出如何为Main方法编写代码,以便能够将用户对月份的选择存储在字符串[]StringValues中。这是我的类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);
    }
}

将执行Main方法,但在控制台中没有结果。我需要将用户选择的月份的名称(字符串值)保存在我的字符串[]StringValues中。请大家帮帮我


解决方案

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


    }

还要创建一个将使用"公共布尔值VerifyButtonPressed()"的主类。这是在没有JDialog的情况下完成相同工作的最简单方法。

相关文章