0

我正在开发一个客户端服务器应用程序,服务器向客户端发送一些东西,客户端可以看到显示在 GUI 中的项目。我可以从服务器完美地发送所有内容,以显示在客户端的 JTextarea 上。但是,我面临的一个问题是在客户端显示日期,我在 GUI 的文本区域中收到一个长文本,看起来像 java.util.Gregeon CalenderCalender[time?= etc..... 在所有文本之后,我仍然可以在文本区域的底部看到日期,但它的格式不正确。

这是客户端代码的一部分,用于处理从服务器接收信息并将信息显示到 GUI 上。

        public void  displayItems() 
{
    Integer itemNumber = networkInput.nextInt();
    networkInput.nextLine();
    //String bidTime = networkInput.next();
    //= networkInput.next();

    DefaultListModel<String> lmdl = new DefaultListModel<String>();

    for(int i=0; i<itemNumber; i++)
    {
        String itemCode = networkInput.nextLine();
        String itemName = networkInput.nextLine();
        String itemDescription = networkInput.nextLine();
        String date = networkInput.nextLine();
        System.out.println(date);
        int hrs = Integer.parseInt(date.substring(0,2));
        int mins = Integer.parseInt(date.substring(3,5));
        Items item = new Items(itemCode,itemName,itemDescription, hrs, mins);
        itemList.add(item);

        lmdl.addElement(item.getItemCode());


    }
    ItemList.setModel(lmdl);// Add to List


}
   class ButtonHandler implements ActionListener 
   {
       private Object sel;
        public void actionPerformed(ActionEvent e) 
        {
            int selectedIx = ItemList.getSelectedIndex();
            String bid = txtBidAmount.getText();
            System.out.println("Sending the bid for " + itemList.get(selectedIx).getItemCode() + " for " + bid);

            output.println("bid");
            output.println(itemList.get(selectedIx).getItemCode());
            output.println(bid);

            String serverResponce = networkInput.nextLine();
            System.out.println(serverResponce);
            if(serverResponce.contains("success"))
            {
                //display sucess
                JOptionPane.showMessageDialog(frame,"Bid accepted");
            }
            else
            {
                JOptionPane.showMessageDialog(frame,"low bid");
            }


        }
   }

  class  RefreshListner implements ListSelectionListener{
     //String date = networkInput.nextLine();
    @Override
    public void valueChanged(ListSelectionEvent arg0) {

        Integer IDx = ItemList.getSelectedIndex();
        text.setText(itemList.get(IDx).getName()+ "\n" + itemList.get(IDx).getDescription() + itemList.get(IDx).getDeadline());


    }


  }

}

4

2 回答 2

2

GregorianCalendar的toString方法不会产生显示友好的时间字符串。在将其设置到文本区域之前,您需要使用 DateFormatter 将其转换为更“令人愉悦”的格式。这是一个可以扩展的简单示例:

Calendar calendar = new GregorianCalendar();
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = formatter.format(calendar.getTime());
于 2013-03-19T21:38:46.727 回答
1

问题是您只需要从输入字符串中获取时间:

String date = networkInput.nextLine();
int hrs = Integer.parseInt(date.substring(0,2));
int mins = Integer.parseInt(date.substring(3,5));

看起来您在输入行中有类似“10:39”的内容 - 解析完整日期(包括日、月和年)并创建日历对象:

DateFormat df = new SimpleDateFormat("dd/mm/yyyy HH:mm");
Date date = df.parse(networkInput.nextLine());

然后使用日期对象,如果需要,您可以使用它只是时间。

于 2013-03-19T22:27:54.680 回答