Java 根据用户输入计算星期几
我不知道如何让我的程序根据用户输入的月、日、年来计算一周中的哪一天。如下图所示。我不知道如何使它连接到JTextField和jcombox。我真的很感谢任何人的帮助。我知道我应该用: 日历圣诞节=新公历1998年12月25日; int dayOfWeek=xmas.getCalendar.DAY\u OF_WEEK;//6=星期五Java 根据用户输入计算星期几,java,swing,calendar,Java,Swing,Calendar,我不知道如何让我的程序根据用户输入的月、日、年来计算一周中的哪一天。如下图所示。我不知道如何使它连接到JTextField和jcombox。我真的很感谢任何人的帮助。我知道我应该用: 日历圣诞节=新公历1998年12月25日; int dayOfWeek=xmas.getCalendar.DAY\u OF_WEEK;//6=星期五 import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.Act
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JTextField;
import javax.swing.JTextArea;
public class DayOfWeek extends JFrame
{
private JPanel contentPane;
private JTextField yearField;
private JLabel dayOfW;
/**
* Launch the application.
*/
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
DayOfWeek frame = new DayOfWeek();
frame.setVisible(true);
} catch (Exception e)
{
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public DayOfWeek()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 230);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel monthL = new JLabel("Month:");
monthL.setBounds(10, 11, 46, 14);
contentPane.add(monthL);
JComboBox monthBox = new JComboBox();
monthBox.setModel(new DefaultComboBoxModel(new String[] {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}));
monthBox.setBounds(53, 8, 109, 20);
contentPane.add(monthBox);
JLabel dayL = new JLabel("Day: ");
dayL.setBounds(172, 11, 31, 14);
contentPane.add(dayL);
JComboBox dayBox = new JComboBox();
dayBox.setModel(new DefaultComboBoxModel(new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"}));
dayBox.setBounds(203, 8, 53, 20);
contentPane.add(dayBox);
JLabel yearL = new JLabel("Year: ");
yearL.setBounds(266, 11, 37, 14);
contentPane.add(yearL);
yearField = new JTextField();
yearField.setBounds(301, 8, 86, 20);
contentPane.add(yearField);
yearField.setColumns(10);
JLabel dayOfW;
dayOfW = new JLabel("The day of the week is");
dayOfW.setBounds(10, 153, 126, 14);
contentPane.add(dayOfW);
JTextArea textArea = new JTextArea();
textArea.setBounds(172, 148, 160, 19);
contentPane.add(textArea);
Calendar xmas = new GregorianCalendar(1998, Calendar.DECEMBER, 25);
int dayOfWeek = xmas.get(Calendar.DAY_OF_WEEK); // 6=Friday
yearField.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
}
});
}
}
非常感谢您不要在swing组件上使用awt侦听器。swing附带DocumentListener,它将侦听字段文本的更改
yearField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
calc();
}
public void removeUpdate(DocumentEvent e) {
calc();
}
public void insertUpdate(DocumentEvent e) {
calc();
}
public void calc() {
//get values from fields
//pass them to gregorian calendar constructor
//get day of week from calendar
//print day to label
}
});
不要在swing组件上使用awt侦听器。swing附带DocumentListener,它将侦听字段文本的更改
yearField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
calc();
}
public void removeUpdate(DocumentEvent e) {
calc();
}
public void insertUpdate(DocumentEvent e) {
calc();
}
public void calc() {
//get values from fields
//pass them to gregorian calendar constructor
//get day of week from calendar
//print day to label
}
});
试试这个:
yearField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
//check the value of the other input fields
//do the calculations
textArea.setText("the result here");
}
});
试试这个:
yearField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
//check the value of the other input fields
//do the calculations
textArea.setText("the result here");
}
});
你有很多选择 你可以 在每个字段上使用FocusListener,当调用focusLost时,验证每个字段的状态,以确定是否有足够的信息来执行所需的计算…但这并不考虑如果用户只在最后一个字段上按Enter键可能发生的情况 你可以 在每个字段上使用ActionListener来检测用户何时按Enter键或单个字段何时被操作,并验证每个字段的状态,以确定您是否有足够的信息来执行所需的计算,但这并不考虑用户未在字段上按Enter键的情况 你可以 同时使用FocusListener和ActionListener,它们只调用一个方法来验证每个字段的状态,以确定您是否有足够的信息来执行所需的计算 你可以 有一个用户需要按下以执行计算的按钮。激活时,它将验证每个字段的状态,以确定您是否有足够的信息来执行所需的计算 看看: 您甚至可以使用InputVerifier,有关更多详细信息,请参阅 说到这里,你们的主要问题是一个参考问题
所有字段都在本地向构造函数声明。虽然您可以将它们声明为final,并且可以从ActionListener的内部类中访问它们,但我个人会将它们声明为实例变量,以便您可以从类本身的任何位置访问它们。这为您提供了更大的机会来实现所需的逻辑。您有许多选择 你可以 在每个字段上使用FocusListener,当调用focusLost时,验证每个字段的状态,以确定是否有足够的信息来执行所需的计算…但这并不考虑如果用户只在最后一个字段上按Enter键可能发生的情况 你可以 在每个字段上使用ActionListener来检测用户何时按Enter键或单个字段何时被操作,并验证每个字段的状态,以确定您是否有足够的信息来执行所需的计算,但这并不考虑用户未在字段上按Enter键的情况 你可以 同时使用FocusListener和ActionListener,它们只调用一个方法来验证每个字段的状态,以确定您是否有足够的信息来执行所需的计算 你可以 有一个用户需要按下以执行计算的按钮。激活时,它将验证每个字段的状态,以确定您是否有足够的信息来执行所需的计算 看看: 您甚至可以使用InputVerifier,有关更多详细信息,请参阅 说到这里,你们的主要问题是一个参考问题
所有字段都在本地向构造函数声明。虽然您可以将它们声明为final,并且可以从ActionListener的内部类中访问它们,但我个人会将它们声明为实例变量,以便您可以从类本身的任何位置访问它们。这为您提供了更大的机会来实现所需的逻辑。为什么不创建一个按钮?然后,您为该按钮设置一个操作,并根据输入字段检查日期。否则,我想您必须在三个字段中的更改事件上执行此操作。只需从输入中获取值,将其传递给公历构造函数,从一周中的日历日获取并打印到标签。我无法为其创建按钮,只能通过按yearField的enter键进行计算。所以我真的不知道如何链接它。@user2268587好的,这是你应该在最初的帖子中说的。请检查我的答案。请修复问题标题。为什么不创建一个按钮?然后,您为该按钮设置一个操作,并根据输入字段检查日期。否则,您必须在中的更改事件中执行此操作
我猜这三个字段。只需从输入中获取值,将其传递给公历构造函数,从一周的日历日获取并打印到标签。我无法为其创建按钮,只能通过按yearField的enter键来计算。所以我真的不知道如何链接它。@user2268587好的,这是你应该在最初的帖子中说的。请检查我的答案。请确定问题的标题。不,永远不会,纳塔。决不应将KeyListener添加到文本组件。在您介绍的用例中,这就是ActionListener的用途。@谢谢,我不知道。刚刚意识到当你按下回车键时ActionListener被触发,焦点在字段中,理论上和我做的是一样的。编辑了我的答案。不,从来没有,纳塔。决不应将KeyListener添加到文本组件。在您介绍的用例中,这就是ActionListener的用途。@谢谢,我不知道。刚刚意识到当你按下回车键时ActionListener被触发,焦点在字段中,理论上和我做的是一样的。编辑了我的答案。不要在swing组件上使用awt侦听器-为什么?API直接支持它。不要在swing组件上使用awt侦听器-为什么?它由API直接支持