public synchronized void initComponent() {
		this.setName("Kategorienbaum");
		this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));// aeusserer rahmen
		// untereinander

		// Baum
		try {
			fillTree();
		} catch (Exception e) {
			e.printStackTrace(System.err);
		}

		setLayout(new GridBagLayout());

		// add split pane
		JSplitPane splitPane = new JSplitPane();
		splitPane.setContinuousLayout(false);
		splitPane.setOneTouchExpandable(true);
		GridBagConstraints gbc;
		gbc = new GridBagConstraints();
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.weightx = 1.0;
		gbc.weighty = 1.0;
		gbc.fill = GridBagConstraints.BOTH;
		add(splitPane, gbc);


		categoryTree.addTreeSelectionListener(new TreeSelectionListener() {
			public void valueChanged(TreeSelectionEvent e) {
				TreePath path = e.getPath();
				Object[] ancs = path.getPath();
				Category[] categories = new Category[ancs.length];
				for (int i = 0; i < categories.length; i++) {
					categories[i] = (Category) ((DefaultMutableTreeNode) ancs[i]).getUserObject();
				}
				try {
					fillProductList(categories);
				} catch (Exception q) {
					System.err
							.println("Die Produktliste konnte nicht geladen werden (Categories.class)");
					q.printStackTrace(System.err);
				}
			}
		});
		categoryTree.addTreeWillExpandListener(new TreeWillExpandListener() {
			public void treeWillExpand(TreeExpansionEvent event) throws ExpandVetoException {
				DefaultMutableTreeNode node = (DefaultMutableTreeNode) event.getPath().getLastPathComponent();
				Category category = (Category) node.getUserObject();

				if (node.getChildCount() == 1) {
					DefaultMutableTreeNode node2 = (DefaultMutableTreeNode) node.getChildAt(0);
					Category category2 = (Category) node2.getUserObject();

					// if the child is the loadCats, replace the children by the right children of the category
					if (category2 == loadCats) {
						setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
						node.removeAllChildren();

						for (Category category1 : category.getChildren()) {
							node.add(nonRecursive(category1));
						}
						((DefaultTreeModel) categoryTree.getModel()).reload(node);
						setCursor(Cursor.getDefaultCursor());
					}
				}
			}

			public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException {
			}
		});

		JPanel produktrahmen = new JPanel();
		produktrahmen.setLayout(new BorderLayout());
		produktrahmen.setName("Kategorienbaum - Rahmen fuer Produkte");
		// JButton details = new JButton("Details");

		table = new Table();
		table.createTable(produktrahmen);
		table.getTable().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		table.getTable().getSelectionModel().addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent e) {
				int selectionIndex = table.getTable().getSelectionModel().getMinSelectionIndex();
				if (selectionIndex >= 0) {
					Product product = productList.get(selectionIndex);
					details.loadDetailsFromProduct(product);
				}
			}
		});

		splitPane.setLeftComponent(new BorderPanel(categoryTree, "Kategorienbaum", 300, 200, 300, 1000, true));
		splitPane.setRightComponent(new BorderPanel(produktrahmen, "Produkte", true));
	}