2012-02-23 2 views
1

У меня есть это приложение библиотеки, которое имеет несколько разных методов в своем классе контроллера. Один из них называется checkOut, который используется для проверки элементов библиотеки.Добавление графического интерфейса в мое приложение

Я пытаюсь сделать так, чтобы кнопка «checkout» была нажата, и я надеюсь, что она сможет получить всю необходимую информацию из созданных мной txt-полей.

Я сделал следующее, и он просто взрывается красными ошибками везде, когда я нажимаю «checkout» во время работы. Любая помощь приветствуется, THX!

if (source == checkoutButton) 
    { 
     /*JDialog checkout = new JDialog(checkoutContent, "Checkout", true); 
     JPanel panel = new JPanel(); 
     checkout.setBounds(750, 300, 350, 190); 
     checkout.setResizable(false); 
     checkout.add(panel); 
     checkout.setVisible(true);*/ 

     String borrowerID = userIDTxtField.getText(); 
     String code = itemIDField.getText(); 
     String date = dateField.getText(); 
     String copyString = code.substring(1); 
     int copy=Integer.valueOf(copyString); 

if (ctrl.checkBorrower(borrowerID)) 
      { 

     boolean valid = false; 
     SimpleDateFormat sdf1= new SimpleDateFormat("M/dd/yyyy"); 
     sdf1.setLenient(false); 

        while (!valid) 
        { 

        try 
        { 
         sdf1.parse(date); 
         catalogArea.setText(ctrl.checkOut(borrowerID, code, copy, date)); 
         valid = true; 

        } 
        catch (Exception e) 
        { 
         catalogArea.setText("Date is not valid. Please try again."); 
         continue; 
        } 

        } 
      } 
      else 
      { 
       catalogArea.setText("Sorry Invalid ID"); 
      } 

    } 
+0

Какая ошибка? –

+0

* «Взорвать красные ошибки везде» * Это должно быть очень красиво. :) –

+1

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). Если бы у меня был SSCCE, не было бы причин «предполагать» или «угадывать» - что-то, в чем я не особенно хорош. ;) –

ответ

4
while (!valid) 
{ 
try 
{ 
    sdf1.parse(date); 
    catalogArea.setText(ctrl.checkOut(borrowerID, code, copy, date)); 
    valid = true; 
} 
catch (Exception e) 
{ 
    catalogArea.setText("Date is not valid. Please try again."); 
    continue; 
} 
} 

Этот код вызовет бесконечный цикл эффективно, если дата является недействительной. Графический интерфейс, скорее всего, будет заблокирован (если это происходит на EDT - если не на EDT, обновления GUI неверны), поэтому пользователю будет запрещено изменять недопустимую дату, вызывающую цикл.


Чтобы решить эту проблему, я бы посмотрел на первый код изменения, который не показан в цикле. В принципе, dateField (предположительно JTextField) должен быть JSpinner.

SpinnerDemo

См How to Use Spinners в учебнике для этого скриншота, работающий код, и дальнейшие советы.

Если текстовое поле было вместо этого поворотным, все синтаксические проверки валидации были излишними. Счетчик предоставит действительную (но не обязательно корректную) информацию о API-интерфейсе пользователя).

+1

для JSpinner +1 – mKorbel

+0

@mKorbel Слишком часто я читаю вопросы, которые заставляют меня думать: «Зачем вам использовать молоток, когда вам нужна отвертка?». Это одна из тех вещей, где «правильный инструмент для работы» поможет очень. :) –

+0

........., и я беру программу GUI как непринятую часть [Изобразительное искусство] (http://en.wikipedia.org/wiki/Visual_arts) – mKorbel

Смежные вопросы