private void updateDisplay() {
		int recursionDepth = spinnerModel.getNumber().intValue();
		final List expansion = expander.expansionForLevel(recursionDepth);
		progressBar.setMaximum(expansion.size() * 2);
		imageDisplay.setImage(null);
		Image renderImage = null;

		final javax.swing.Timer t = new javax.swing.Timer(30,
				new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						int i = renderer.getDoneSymbols() - 1;
						progressBar.setValue(i);
						progressBar.repaint();
					}
				});

		final Thread drawThread = new Thread() {
			public void run() {
				if (expansion.size() < 70) {
					String expansionString = LSystemInputPane
							.listAsString(expansion);
					expansionDisplay.setText(expansionString);
				} else
					expansionDisplay.setText("Suffice to say, quite long.");
				// Now, set the display.
				Map parameters = lsystem.getValues();

				t.start();
				Matrix m = new Matrix();
				double pitch = pitchModel.getNumber().doubleValue(), roll = rollModel
						.getNumber().doubleValue(), yaw = yawModel.getNumber()
						.doubleValue();
				m.pitch(pitch);
				m.roll(roll);
				m.yaw(yaw);
				Point origin = new Point(); // Ignored, for now.
				Image image = renderer.render(expansion, parameters, m, null,
						origin);
				imageDisplay.setImage(image);
				t.stop();
				imageDisplay.repaint();
				imageDisplay.revalidate();
				progressBar.setValue(progressBar.getMaximum());
			}
		};
		drawThread.start();
	}