正在编写Main方法问题。Java图形用户界面列表
我想不出如何为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的情况下完成相同工作的最简单方法。
相关文章