Need to display a JSeparator in a JComboBox

I use the following comboBox to display a set of strings to the operator, that will
grey out the third selection (see "Text Line 3", false)...
My problem is that the separator does not display correctly - it seems to produce the ToString()
results in the line of text. What can I do to display the horizontal separator in the comboBox list?

Thanks

Object[] items = { 	new ComboItem<String>(new String("Text Line 1"), true),
					new ComboItem<String>(new String("Text Line 2"), true), 
					new ComboItem<JSeparator>(new JSeparator(), true),
					new ComboItem<String>(new String("Text Line 3"), false), 
				
				
		selectionComboBox = new JComboBox(items);
		selectionComboBox.setRenderer(new ComboRenderer());
		selectionComboBox.addActionListener(new ComboListener(selectionComboBox));
		selectionComboBox.setBounds(140, 101, 254, 25);
		selectionComboBox.setMaximumRowCount(14);
		getContentPane().add(selectionComboBox);
		
		// CellRenderer
		class ComboRenderer extends JLabel implements ListCellRenderer {
		private static final long serialVersionUID = 1L;
 
		public ComboRenderer() {
			setOpaque(true);
			setBorder(new EmptyBorder(1, 1, 1, 1));
		}
 
		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
				boolean cellHasFocus) {
			if (isSelected) {
				setBackground(list.getSelectionBackground());
				setForeground(list.getSelectionForeground());
			} else {
				setBackground(list.getBackground());
				setForeground(list.getForeground());
			}
			if (!((CanEnable) value).isEnabled()) {
				setBackground(list.getBackground());
				setForeground(UIManager.getColor("Label.disabledForeground"));
			}
			setFont(list.getFont());
			setText((value == null) ? "" : value.toString());
			return this;
		}
	}
 
	/**
	 * Handles the combo box selection
	 *
	 */
	class ComboListener implements ActionListener {
		JComboBox combo;
		Object currentItem;
 
		ComboListener(JComboBox combo) {
			this.combo = combo;
			combo.setSelectedIndex(0);
			currentItem = combo.getSelectedItem();
		}
 
		public void actionPerformed(ActionEvent e) {
			Object tempItem = combo.getSelectedItem();
			if (!((CanEnable) tempItem).isEnabled()) {
				combo.setSelectedItem(currentItem);
			} else {
				currentItem = tempItem;
			}
		}
	}
 
	/**
	 * The item displayed by the combo box
	 *
	 * @param <T>
	 */
	class ComboItem<T> implements CanEnable {
		T obj;
		boolean isEnable;
 
		ComboItem(T obj, boolean isEnable) {
			this.obj = obj;
			this.isEnable = isEnable;
		}
 
		ComboItem(T obj) {
			this(obj, true);
		}
 
		public boolean isEnabled() {
			return isEnable;
		}
 
		public void setEnabled(boolean isEnable) {
			this.isEnable = isEnable;
		}
 
		public String toString() {
			return obj.toString();
		}
 
		public T getValue() {
			return obj;
		}
	}

Open in new window

dbCncAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
zzynxSoftware engineerCommented:
>> My problem is that the separator does not display correctly - it seems to produce the ToString()

Sure. That's what you told it to do:

setText((value == null) ? "" : value.toString());
0
 
dbCncAuthor Commented:
xxynk,

Thanks for the reply - but it's still not obvious to me how to display the separator as a line.

==>Sure. That's what you told it to do:
==>setText((value == null) ? "" : value.toString());

Perhaps I can test the obj T in ComboItem, and do something different from what is returned in line 93,
but I want a solid line to appear - of the correct length for the displayed ComboBox.

Could you elaborate?

Thanks again...
0
 
dbCncAuthor Commented:
ZZYNX,

The first solution was exactly what I was looking for. I had gone through quite a few examples from that site - but never found that one.

I added my enable/disable code to the listeners, and I'm all set...

Thanks Again
0
 
zzynxSoftware engineerCommented:
Thanx 4 axxepting
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.