Farben in JList

bjmicha

Mitglied
Hallo,

ich würde geren wenn man doppelt auf einen Eintrag in einer JList klickt diesen anders einfärben als die anderen Einträge.
Wie geht dies? DefaultCellRenderer

Gruß

Michael
 
Hallo!

Hat zwar noch einen macken aber den kannst du ja ausmerzen ...:

Code:
import java.awt.Color;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;

/*
 * Created on 03.03.2004
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

/**
 * @author Darimont
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class JListTest extends JFrame {

	static int[] clickCnt = new int[5];
	private long lastClickTime;
	private int lastIndex;

	public JListTest() {
		super("JListTest");
		setSize(320, 240);
		
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent event) {
				setVisible(false);
				dispose();
				System.exit(0);
			}
		});

		final JList list = new JList();
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		list.setListData(new String[] { "elem1", "elem2", "elem4", "elem5" });
		list.setCellRenderer(new MyListCellRenderer());
		list.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent evt) {
				int idx = list.getSelectedIndex();
				if (lastIndex == idx) {
					if (System.currentTimeMillis() - lastClickTime < 250) {
						clickCnt[idx] = 2;
						System.out.println("Double clicked on " + idx);
					}
				} else {
					lastIndex = idx;
					clickCnt[idx] = 1;
				}
				lastClickTime = System.currentTimeMillis();
				
			}
		});

		getContentPane().add(list);
		setVisible(true);
		
	}
	public static void main(String[] args) {
		new JListTest();
	}

	class MyListCellRenderer extends JLabel implements ListCellRenderer {

		/* (non-Javadoc)
		 * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
		 */
		public Component getListCellRendererComponent(
			JList list,
			Object value,
			int index,
			boolean isSelected,
			boolean cellHasFocus) {
			// TODO Auto-generated method stub
			setText(value.toString());
			if (clickCnt[index] == 2) {
				setForeground(Color.red);
			} else
				setForeground(Color.black);
			return this;
		}
	}
}

Siehe auch: http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html#renderer

Gruß Tom
 
Zuletzt bearbeitet:
Zurück