public MinimizePane(FiniteStateAutomaton dfa, Environment environment) {
		// Set up the minimizable automaton, and the minimize tree.
		minimizer = new Minimizer();
		minimizer.initializeMinimizer();
		dfa = (FiniteStateAutomaton) minimizer.getMinimizeableAutomaton(dfa);
		// minimizer.initializeMinimizer();
		TreeModel tree = minimizer.getInitializedTree(dfa);
		// Set up the drawers.
		automatonDrawer = new SelectionDrawer(dfa);
		treeDrawer = new SelectTreeDrawer(tree);
		// Set up the minimize node drawer.
		MinimizeNodeDrawer nodeDrawer = new MinimizeNodeDrawer();
		treeDrawer.setNodeDrawer(nodeDrawer);
		TreeNode[] groups = Trees.children((MinimizeTreeNode) tree.getRoot());
		for (int i = 0; i < groups.length; i++) {
			MinimizeTreeNode group = (MinimizeTreeNode) groups[i];
			State[] states = (State[]) group.getUserObject();
			if (states.length == 0)
				continue;
			if (dfa.isFinalState(states[0]))
				nodeDrawer.setLabel(group, "Final");
			else
				nodeDrawer.setLabel(group, "Nonfinal");
		}

		// Set up the controller object.
		controller = new MinimizeController(this, automatonDrawer, treeDrawer,
				minimizer);
		JPanel right = new JPanel(new BorderLayout());
		right.add(initTreePane(), BorderLayout.CENTER);
		controlPanel = new ControlPanel(treeDrawer, controller);
		/*
		 * right.add(new ControlPanel(treeDrawer, controller),
		 * BorderLayout.SOUTH);
		 */

		// Finally, initialize the view.
		split = SplitPaneFactory.createSplit(environment, true, 0.5,
				initAutomatonPane(), right);
		setLayout(new BorderLayout());
		add(split, BorderLayout.CENTER);
		add(controlPanel, BorderLayout.NORTH);
		add(messageLabel, BorderLayout.SOUTH);
		split.setResizeWeight(0.5);
		controller.setEnabledness();
	}