【问题标题】:How can I make my code work in a GUI using Swing in Java?如何使用 Java 中的 Swing 使我的代码在 GUI 中工作?
【发布时间】:2012-10-09 16:10:25
【问题描述】:

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

所以我这里有两个问题:

  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,如果问题很明显或容易解决,请原谅...但是有人能弄清楚如何解决它吗?谢谢!

【问题讨论】:

  • 对于只有一周经验的人来说,这是一个相当复杂的要求。我会先阅读Creating a GUI With JFC/Swing
  • @RazorShadow 您可以将JFormattedTextField 用于日期值。这是example

标签: java swing date integer arguments


【解决方案1】:

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

您只提供了一个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)];
}

【讨论】:

    【解决方案2】:

    您可以使用Calendar。 看看这段代码你就明白了

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

    【讨论】:

    • 答案如何?充其量只是评论
    • @Razor Shadow I'm only a week into learning Java, so excuse me if the problem is obvious or easy to fix...,那你怎么知道有没有
    • +1 CalendarZeller's congruence 的自定义实现更好。另见Converter
    【解决方案3】:

    首先检查args中是否真的有3个元素

     if(args.length == 3)
           // 计算
         别的
           System.out.println("用法:java DateID "):
    

    【讨论】:

      【解决方案4】:

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

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

      String.valueOf(d0);
      

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

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

      【讨论】:

      • 你到底是什么意思?如果您想查看我的 GUI,我不知道您可以发布图像,直到我现在才检查。另外我应该把那段代码放在哪里?
      • @RazorShadow 抱歉——我指的是代码。代码的问题部分应该是相关的,因为您在问题中提出了它......现在看到它,您是在问为什么 setText 不能用作参数?
      • 不完全是,我的问题正是这个(抱歉不清楚我是否是):它不允许我使用参数,所以我需要一种替代方式让用户输入日期、月份和年份,以便接收一年中的相应日期。另外,我需要最后一行的替代品,因为目前它打印到控制台,如果你将它更改为 jTextArea2.setText(d0) 它不喜欢它。
      • @RazorShadow 我想我现在看到了。检查我的编辑——这应该让你可以创建整数以与 Abu 的响应一起使用来打印星期几。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2018-03-22
      • 2016-09-01
      相关资源
      最近更新 更多