我无法弄清楚如何为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中。请任何人帮助我,
答案 0 :(得分:3)
您有两种选择。您可以使用JFrame
。
JDialog
模态对话框将停止程序执行,直到它被关闭为止。
另一种选择是使用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的情况下完成相同工作的最简单方法。