2

我的 GUI 的一个想法 我正在制作一个可以做多种事情的工具,我现在正在使用最后一个功能:您输入一个日期,它会告诉您该日期是一周中的哪一天。

所以我在这里有两个问题:

  1. 我不能使用参数,它不喜欢它们
  2. 在最后一行,我不能使用 jTextArea2.setText(d0); 因为它也不喜欢……

我的代码在这里:

    public static void main(String[] args) { 
        int d = Integer.parseInt(args[0]);
        int m = Integer.parseInt(args[1]);
        int y = Integer.parseInt(args[2]);

        int y0 = y - (14 - m) / 12;
        int x = y0 + y0/4 - y0/100 + y0/400;
        int m0 = m + 12 * ((14 - m) / 12) - 2;
        int d0 = (d + x + (31*m0)/12) % 7;

        System.out.println("Sunday = 0\nMonday = 1\nTuesday = 2\nWednesday = 3\nThursday = 4\nFriday = 5\nSaturday = 6\nThis date is on a:");
        System.out.println(d0);

基本上,这段代码最初是用于控制台的,现在我想将它实现到一个 Swing GUI 应用程序中。

我只有一周的时间学习 Java,所以如果问题很明显或容易解决,请原谅......但是有人能弄清楚如何解决它吗?谢谢!

4

4 回答 4

2

您面临的问题是日期将以什么格式出现。

你只JTextArea为他们提供了一个输入值,所以他们可以输入任何东西......

因此,首先,您需要一种可以接受传入值的方法...

public String toDayOfWeek(String date) {
}

从这里您需要将传入的值格式化为Date

String dayOfWeek = null;
try {
    Date date = DateFormat.getDateInstance().parse(date);
} catch (ParseException exp) {
    dayOfWeek = date + " is an invalid date format";
}
return dayOfWeek;

(显然,以上属于toDayOfWeek(String)方法)

现在,就个人而言,我会将Date值传递给另一种方法,但那是因为我疯了......

public String toDayOfWeek(Date date) {
    // Now you could extract the various values from the Date object
    // but those methods are deprecated...
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);

    int day = cal.get(Calendar.DATE);
    int month = cal.get(Calendar.MONTH); // Months are 0 based
    int year = cal.get(Calendar.YEAR);

    // Your calculation here...

    return yourDayCalculation;
}

但老实说,这样做会更简单,更容易......

public String toDayOfWeek(Date date) {
    // Now you could extract the various values from the Date object
    // but those methods are deprecated...
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);

    return DateFormatSymbols.getInstance().getWeekdays()[cal.get(Calendar.DAY_OF_WEEK)];
}

所以你最终会得到两种方法......

public String toDayOfWeek(String date) {
    String dayOfWeek = null;
    try {
        Date date = DateFormat.getDateInstance().parse(date);
        dayOfWeek = toDayOfWeek(date);
    } catch (ParseException exp) {
        dayOfWeek = date + " is an invalid date format";
    }
    return dayOfWeek;
}

public String toDayOfWeek(Date date) {
    // Now you could extract the various values from the Date object
    // but those methods are deprecated...
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);

    return DateFormatSymbols.getInstance().getWeekdays()[cal.get(Calendar.DAY_OF_WEEK)];
}
于 2012-10-19T06:50:09.680 回答
1

首先检查 args 中是否实际上有 3 个元素

   if(args.length == 3)
       // 计算
     别的
       System.out.println("用法:java DateID <month> <day> <year>"):
于 2012-10-19T04:57:25.357 回答
1

假设您的 GUI 没有被显示为示例......

对于您的第二个问题,JTextArea 继承自 JTextComponent,您将在其中找到setText 方法。由于它接受字符串而不是整数,因此您可能希望执行以下操作:

String.valueOf(d0);

我相信您也可以将 d0 连接到字符串文字(例如 println 中的文字),并且效果也一样。

编辑:请记住 setText 只会设置该字段的值。如果要获取文本,则需要使用getText 方法并将结果字符串拆分为您指定的任何分隔符。结果将存储在一个字符串数组中,然后您可以将其转换为整数并与 Calendar ala Abu 的响应一起使用。

于 2012-10-19T04:58:29.513 回答
1

您可以使用日历。看看这段代码,你就会明白

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,2012);
cal.set(Calendar.MONTH,0);//Note that months start at 0 i.e. January is 0
cal.set(Calendar.DAY,1);

System.out.println(cal.get(Calendar.DAY_OF_WEEK)));
于 2012-10-19T04:55:43.307 回答