public TaskEntryPanel()
  {
    courseWidgets = new ArrayList<CourseWidget>();
    taskWidgets = new ArrayList<TaskWidget>();
    subTaskWidgets = new ArrayList<SubTaskWidget>();
    // Initialize Components and Containers
      // Split Panes
        mainSplitPane = new JSplitPane();
        nestedSplitPane = new JSplitPane();

      // Panels
        leftContent = new JPanel();
        centerContent = new JPanel();
        rightContent = new JPanel();
        leftPane = new JPanel();
        centerPane = new JPanel();
        rightPane = new JPanel();

      // Scroll Panes
        leftScrollPane = new JScrollPane(leftContent);
        centerScrollPane = new JScrollPane(centerContent);
        rightScrollPane = new JScrollPane(rightContent);

      // Other Components
        quickCourseField = new JTextField();
        quickTaskField = new JTextField();
        quickSubTaskField = new JTextField();
        courseAddButton = new JButton("+");
        taskAddButton = new JButton("+");
        subTaskAddButton = new JButton("+");

        quickCourseField.setToolTipText("<html>Enter a new course title in this field.<br>" +
                                        "Then press enter or click the button to the right<br>" +
                                        "to create a new course with the desired title.</html>");
        quickTaskField.setToolTipText("<html>Enter a new task name in this field.<br>" +
                                      "Then press enter or click the button to the right<br>" +
                                      "to create a new task with the desired name.</html>");
        quickSubTaskField.setToolTipText("<html>Enter a new sub-task name in this field.<br>" +
                                         "Then press enter or click the button to the right<br>" +
                                         "to create a new sub-task with the desired name.</html>");

        courseAddButton.setToolTipText(quickCourseButtonToolTip);
        taskAddButton.setToolTipText(quickTaskButtonToolTip);
        subTaskAddButton.setToolTipText(quickSubTaskButtonToolTip);

      // Layouts
        centerLayout = new SpringLayout();
        leftLayout = new SpringLayout();
        rightLayout = new SpringLayout();
        layout = new SpringLayout();


    //Configure Components
      courseAddButton.setPreferredSize(new Dimension(40, 20));
      taskAddButton.setPreferredSize(new Dimension(40, 20));
      subTaskAddButton.setPreferredSize(new Dimension(40, 20));
      quickCourseField.setText(quickCourseText);
      quickCourseField.setForeground(Color.gray);
      //quickTaskField.setText(quickTaskText);
      quickTaskField.setForeground(Color.gray);
      //quickSubTaskField.setText(quickSubTaskText);
      quickSubTaskField.setForeground(Color.gray);
      centerScrollPane.setMinimumSize(new Dimension(300, 0));


    //Configure Containers
      /*
      leftPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.black),
                                                          "Courses",
                                                          TitledBorder.LEFT,
                                                          TitledBorder.TOP));
      */
      leftPane.setMinimumSize(new Dimension(225, 0));
      centerPane.setMinimumSize(new Dimension(300, 0));
      rightPane.setMinimumSize(new Dimension(220, 0));
      quickSubTaskField.setEnabled(false);
      subTaskAddButton.setEnabled(false);
      quickTaskField.setEnabled(false);
      taskAddButton.setEnabled(false);
      mainSplitPane.setRightComponent(nestedSplitPane);
      mainSplitPane.setLeftComponent(leftPane);
      nestedSplitPane.setLeftComponent(centerPane);
      nestedSplitPane.setRightComponent(rightPane);

      mainSplitPane.setContinuousLayout(true);
      nestedSplitPane.setContinuousLayout(true);

      //mainSplitPane.setDividerLocation(TaskCommander.startingWidth/3);
      //nestedSplitPane.setDividerLocation(TaskCommander.startingWidth/3);
      mainSplitPane.setResizeWeight(.2);
      nestedSplitPane.setResizeWeight(1);



    //Add components
      centerPane.add(quickTaskField);
      centerPane.add(taskAddButton);
      centerPane.add(centerScrollPane);

      leftPane.add(quickCourseField);
      leftPane.add(courseAddButton);
      leftPane.add(leftScrollPane);

      rightPane.add(quickSubTaskField);
      rightPane.add(subTaskAddButton);
      rightPane.add(rightScrollPane);

      add(mainSplitPane);


    //Set Layouts
      setLayout(layout);
      leftContent.setLayout(new BoxLayout(leftContent, BoxLayout.PAGE_AXIS));
      centerContent.setLayout(new BoxLayout(centerContent, BoxLayout.PAGE_AXIS));
      rightContent.setLayout(new BoxLayout(rightContent, BoxLayout.PAGE_AXIS));
      centerPane.setLayout(centerLayout);
      leftPane.setLayout(leftLayout);
      rightPane.setLayout(rightLayout);


    //Configure Layouts
      int margin = 3;
      centerLayout.putConstraint(SpringLayout.NORTH, taskAddButton, 0, SpringLayout.NORTH, quickTaskField);
      centerLayout.putConstraint(SpringLayout.SOUTH, taskAddButton, 0, SpringLayout.SOUTH, quickTaskField);
      centerLayout.putConstraint(SpringLayout.EAST, taskAddButton, 0, SpringLayout.EAST, centerPane);
    
      centerLayout.putConstraint(SpringLayout.NORTH, quickTaskField, 0, SpringLayout.NORTH, centerPane);
      centerLayout.putConstraint(SpringLayout.EAST, quickTaskField, 0, SpringLayout.WEST, taskAddButton);
      centerLayout.putConstraint(SpringLayout.WEST, quickTaskField, 0, SpringLayout.WEST, centerPane);


      centerLayout.putConstraint(SpringLayout.NORTH, centerScrollPane, margin, SpringLayout.SOUTH,
                                 quickTaskField.getPreferredSize().height > taskAddButton.getPreferredSize().height ? quickTaskField : taskAddButton);
      centerLayout.putConstraint(SpringLayout.SOUTH, centerScrollPane, 0, SpringLayout.SOUTH, centerPane);
      centerLayout.putConstraint(SpringLayout.EAST, centerScrollPane, 0, SpringLayout.EAST, centerPane);
      centerLayout.putConstraint(SpringLayout.WEST, centerScrollPane, 0, SpringLayout.WEST, centerPane);



      leftLayout.putConstraint(SpringLayout.NORTH, courseAddButton, 0, SpringLayout.NORTH, quickCourseField);
      leftLayout.putConstraint(SpringLayout.SOUTH, courseAddButton, 0, SpringLayout.SOUTH, quickCourseField);
      leftLayout.putConstraint(SpringLayout.EAST, courseAddButton, 0, SpringLayout.EAST, leftPane);

      leftLayout.putConstraint(SpringLayout.NORTH, quickCourseField, 0, SpringLayout.NORTH, leftPane);
      leftLayout.putConstraint(SpringLayout.EAST, quickCourseField, 0, SpringLayout.WEST, courseAddButton);
      leftLayout.putConstraint(SpringLayout.WEST, quickCourseField, 0, SpringLayout.WEST, leftPane);

      leftLayout.putConstraint(SpringLayout.NORTH, leftScrollPane, margin, SpringLayout.SOUTH,
                                 quickCourseField.getPreferredSize().height > courseAddButton.getPreferredSize().height ? quickCourseField : courseAddButton);
      leftLayout.putConstraint(SpringLayout.SOUTH, leftScrollPane, 0, SpringLayout.SOUTH, leftPane);
      leftLayout.putConstraint(SpringLayout.EAST, leftScrollPane, 0, SpringLayout.EAST, leftPane);
      leftLayout.putConstraint(SpringLayout.WEST, leftScrollPane, 0, SpringLayout.WEST, leftPane);




      rightLayout.putConstraint(SpringLayout.NORTH, subTaskAddButton, 0, SpringLayout.NORTH, quickSubTaskField);
      rightLayout.putConstraint(SpringLayout.SOUTH, subTaskAddButton, 0, SpringLayout.SOUTH, quickSubTaskField);
      rightLayout.putConstraint(SpringLayout.EAST, subTaskAddButton, 0, SpringLayout.EAST, rightPane);

      rightLayout.putConstraint(SpringLayout.NORTH, quickSubTaskField, 0, SpringLayout.NORTH, rightPane);
      rightLayout.putConstraint(SpringLayout.EAST, quickSubTaskField, 0, SpringLayout.WEST, subTaskAddButton);
      rightLayout.putConstraint(SpringLayout.WEST, quickSubTaskField, 0, SpringLayout.WEST, rightPane);

      rightLayout.putConstraint(SpringLayout.NORTH, rightScrollPane, margin, SpringLayout.SOUTH,
                                 quickSubTaskField.getPreferredSize().height > subTaskAddButton.getPreferredSize().height ? quickSubTaskField : subTaskAddButton);
      rightLayout.putConstraint(SpringLayout.SOUTH, rightScrollPane, 0, SpringLayout.SOUTH, rightPane);
      rightLayout.putConstraint(SpringLayout.EAST, rightScrollPane, 0, SpringLayout.EAST, rightPane);
      rightLayout.putConstraint(SpringLayout.WEST, rightScrollPane, 0, SpringLayout.WEST, rightPane);





      layout.putConstraint(SpringLayout.NORTH, mainSplitPane, 0, SpringLayout.NORTH, this);
      layout.putConstraint(SpringLayout.SOUTH, mainSplitPane, 0, SpringLayout.SOUTH, this);
      layout.putConstraint(SpringLayout.EAST, mainSplitPane, 0, SpringLayout.EAST, this);
      layout.putConstraint(SpringLayout.WEST, mainSplitPane, 0, SpringLayout.WEST, this);



    //Add Listeners
      quickCourseField.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          if (DEBUG) log("Intercepted entry from quickCourseField");
          TaskCommander.addCourse(quickCourseField.getText());
          quickCourseField.selectAll();
        }
      });
      quickCourseField.addFocusListener(new FocusListener()
      {
        public void focusGained(FocusEvent e)
        {
          quickCourseField.setText("");
          quickCourseField.setForeground(Color.black);
        }
        public void focusLost(FocusEvent e)
        {
          quickCourseField.setText(quickCourseText);
          quickCourseField.setForeground(Color.gray);
        }
      });
      quickTaskField.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          if (DEBUG) log("Intercepted entry from quickTaskField");
          addTask(quickTaskField.getText());
          quickTaskField.selectAll();
        }
      });
      quickTaskField.addFocusListener(new FocusListener()
      {
        public void focusGained(FocusEvent e)
        {
          quickTaskField.setText("");
          quickTaskField.setForeground(Color.black);
        }
        public void focusLost(FocusEvent e)
        {
          quickTaskField.setText(quickTaskText);
          quickTaskField.setForeground(Color.gray);
        }
      });
      quickSubTaskField.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          if (DEBUG) log("Intercepted entry from quickSubTaskField");
          TaskCommander.addSubTask(quickSubTaskField.getText());
          quickSubTaskField.selectAll();
        }
      });
      quickSubTaskField.addFocusListener(new FocusListener()
      {
        public void focusGained(FocusEvent e)
        {
          quickSubTaskField.setText("");
          quickSubTaskField.setForeground(Color.black);
        }
        public void focusLost(FocusEvent e)
        {
          quickSubTaskField.setText(quickSubTaskText);
          quickSubTaskField.setForeground(Color.gray);
        }
      });
      taskAddButton.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          if (DEBUG) log("Intercepted click on taskAddButton");
          addTask(quickTaskField.getText());
        }
      });
      subTaskAddButton.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          if (DEBUG) log("Intercepted click on subTaskAddButton");
          TaskCommander.addSubTask(quickSubTaskField.getText());
        }
      });
      courseAddButton.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          if (DEBUG) log("Intercepted click on courseAddButton");
          TaskCommander.addCourse(quickCourseField.getText());
        }
      });
  }