JComboBox / JList Problem im PLAF

shocking

Mitglied
Hi,

ich versuche gerade ein eigenes Look and Feel zu implementieren und stoße bei der ComboBox auf ein Problem. Meine ComboBox enthält ein Panel mit zwei ScrollButtons oben und unten, um durch die Einträge zu scrollen, sowie einem Vieport mit einer Liste dazwischen. Das funktioniert soweit auch. Mein Problem liegt in der Platzierung des Popups.
Ich möchte die Liste so öffnen, dass der selektierte Eintrag genau auf der ursprünglichen ComboBox liegt. Also angenommen es ist EIntrag 4 ausgewählt worden und man klickt auf die ComboBox, dann soll sich die Liste so öffnen, dass der obere ScrollButton und die Einträge 1-3 oberhalb der ComboBox liegen, Eintrag 4 direkt drauf und die Einträge 5-x und der untere ScrollButton unter der ComboBox.
Mein Problem beginnt dann, wenn z.B. EIntrag 10 ausgewählt wurde und oberhalb der ComboBox nun nicht mehr genug Platz ist, um die Einträge 1-9 anzuzeigen. Dann wird der selektierte EIntrag zwar angezeigt, jedoch nciht genau über der ComboBox sondern darunter.

Hier mal mein Code:
Code:
	public void show() {
		Dimension popupSize = comboBox.getSize();
		int editorWidth = popupSize.width;
		int height = getPopupHeightForRowCount(comboBox.getMaximumRowCount());
		
		popupSize.setSize(editorWidth, height);

		Rectangle popupBounds = computePopupBounds(0,
				comboBox.getBounds().height, popupSize.width, popupSize.height);

		if (scrollPanel != null) {
			scrollPanel.setPreferredSize(popupBounds.getSize());
			scrollPanel.setMaximumSize(popupBounds.getSize());
			scrollPanel.setMinimumSize(popupBounds.getSize());
		}
		list.invalidate();
		syncListSelectionWithComboBoxSelection();
		list.ensureIndexIsVisible(list.getSelectedIndex());
		setLightWeightPopupEnabled(comboBox.isLightWeightPopupEnabled());

		/*
		 * Update renderer isListCell field with true. since renderer will
		 * render a list cell after showing the popup.
		 */
		
		setListCell(true);
		
		int index = list.getSelectedIndex();
		int cellHeight = (height / (list.getVisibleRowCount() + 2) * index);
		int offset = cellHeight * index + cellHeight;
		
		show(comboBox, popupBounds.x, popupBounds.y - comboBox.getHeight() - offset);
	}

Vielen Dank für die Hilfe
 
Zurück