Nov 15

You need to set the preferred size of the JScrollBar components.

scrollpane.getVerticalScrollBar().setPreferredSize(
   new Dimension(width, Integer.MAX_VALUE));
scrollpane.getHorizontalScrollBar().setPreferredSize(
   new Dimension(Integer.MAX_VALUE, width));

written by objects \\ tags: ,

Oct 31

You can achieve that by creating a custom ListCellRenderer. Easiest is to subclass DefaultListCellRenderer and override the getListCellRendererComponent() method to add the appropriate icon.

That just leaves how to determine which icon to use for a given combo item value. One solution to this is to provide the renderer with a set of mappings containing what icon to use for which value.


import java.awt.Component;
import java.util.HashMap;
import java.util.Map;

import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.plaf.metal.MetalIconFactory;

public class IconListRenderer
	extends DefaultListCellRenderer {

	private Map<Object, Icon> icons = null;

	public IconListRenderer(Map<Object, Icon> icons) {
		this.icons = icons;
	}

	@Override
	public Component getListCellRendererComponent(
		JList list, Object value, int index,
		boolean isSelected, boolean cellHasFocus) {

		// Get the renderer component from parent class

		JLabel label =
			(JLabel) super.getListCellRendererComponent(list,
				value, index, isSelected, cellHasFocus);

		// Get icon to use for the list item value

		Icon icon = icons.get(value);

		// Set icon to display for value

		label.setIcon(icon);
		return label;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		// setup mappings for which icon to use for each value

		Map<Object, Icon> icons = new HashMap<Object, Icon>();
		icons.put("details",
			MetalIconFactory.getFileChooserDetailViewIcon());
		icons.put("folder",
			MetalIconFactory.getTreeFolderIcon());
		icons.put("computer",
			MetalIconFactory.getTreeComputerIcon());

		JFrame frame = new JFrame("Icon List");
		frame.setDefaultCloseOperation(
			JFrame.DISPOSE_ON_CLOSE);

		// create a list with some test data

		JComboBox combo = new JComboBox(
			new Object[] {
				"details", "computer", "folder", "computer"});

		// create a cell renderer to add the appropriate icon

		combo.setRenderer(new IconListRenderer(icons));
		frame.add(combo);
		frame.pack();
		frame.setVisible(true);
	}

}

written by objects \\ tags: , ,

Oct 29

You need to add your JList (or any component) to a JScrollPane. Easiest way to do this is to pass your component to the JScrollPane’s constructor. You then add the JScrollPane to your component hierarchy (instead of adding your JList).


JScrollPane scrollPne = new JScrollPane(mylist);
panel.add(scrollPane);

written by objects \\ tags: ,