Added component list classes (unfinished)
This commit is contained in:
		
							
								
								
									
										32
									
								
								src/main/java/envoy/client/ui/list/ComponentList.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/main/java/envoy/client/ui/list/ComponentList.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | package envoy.client.ui.list; | ||||||
|  |  | ||||||
|  | import javax.swing.BoxLayout; | ||||||
|  | import javax.swing.JPanel; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Project: <strong>envoy-client</strong><br> | ||||||
|  |  * File: <strong>ComponentList.java</strong><br> | ||||||
|  |  * Created: <strong>25.01.2020</strong><br> | ||||||
|  |  *  | ||||||
|  |  * @author Kai S. K. Engelbart | ||||||
|  |  * @since Envoy v0.3-alpha | ||||||
|  |  */ | ||||||
|  | public class ComponentList<E> extends JPanel { | ||||||
|  |  | ||||||
|  | 	private ComponentListCellRenderer<E> renderer; | ||||||
|  |  | ||||||
|  | 	private static final long serialVersionUID = 1759644503942876737L; | ||||||
|  |  | ||||||
|  | 	public ComponentList(ComponentListModel<E> model, ComponentListCellRenderer<E> renderer) { | ||||||
|  | 		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); | ||||||
|  | 		model.setComponentList(this); | ||||||
|  | 		this.renderer = renderer; | ||||||
|  |  | ||||||
|  | 		for (E elem : model) | ||||||
|  | 			add(renderer.getListCellComponent(this, elem, false)); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	void add(E elem) { | ||||||
|  | 		add(renderer.getListCellComponent(this, elem, false)); | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -0,0 +1,16 @@ | |||||||
|  | package envoy.client.ui.list; | ||||||
|  |  | ||||||
|  | import java.awt.Component; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Project: <strong>envoy-client</strong><br> | ||||||
|  |  * File: <strong>ComponentListCellRenderer.java</strong><br> | ||||||
|  |  * Created: <strong>25.01.2020</strong><br> | ||||||
|  |  *  | ||||||
|  |  * @author Kai S. K. Engelbart | ||||||
|  |  * @since Envoy v0.3-alpha | ||||||
|  |  */ | ||||||
|  | public interface ComponentListCellRenderer<E> { | ||||||
|  |  | ||||||
|  | 	Component getListCellComponent(ComponentList<E> list, E value, boolean isSelected); | ||||||
|  | } | ||||||
							
								
								
									
										83
									
								
								src/main/java/envoy/client/ui/list/ComponentListModel.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								src/main/java/envoy/client/ui/list/ComponentListModel.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | |||||||
|  | package envoy.client.ui.list; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.Iterator; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Project: <strong>envoy-client</strong><br> | ||||||
|  |  * File: <strong>ComponentListModel.java</strong><br> | ||||||
|  |  * Created: <strong>25.01.2020</strong><br> | ||||||
|  |  *  | ||||||
|  |  * @author Kai S. K. Engelbart | ||||||
|  |  * @since Envoy v0.3-alpha | ||||||
|  |  */ | ||||||
|  | public final class ComponentListModel<E> implements Iterable<E> { | ||||||
|  |  | ||||||
|  | 	private List<E> elements = new ArrayList<>(); | ||||||
|  | 	private ComponentList<E> componentList; | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Adds an element to this model and notifies the associated | ||||||
|  | 	 * {@link ComponentList} to add the corresponding component. | ||||||
|  | 	 *  | ||||||
|  | 	 * @param e the element to add | ||||||
|  | 	 * @return {@code true} | ||||||
|  | 	 * @see java.util.List#add(java.lang.Object) | ||||||
|  | 	 */ | ||||||
|  | 	public boolean add(E e) { | ||||||
|  | 		componentList.add(e); | ||||||
|  | 		return elements.add(e); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Removes all elements from this model and clears the associated | ||||||
|  | 	 * {@link ComponentList}. | ||||||
|  | 	 *  | ||||||
|  | 	 * @see java.util.List#clear() | ||||||
|  | 	 * @since Envoy v0.3-alpha | ||||||
|  | 	 */ | ||||||
|  | 	public void clear() { | ||||||
|  | 		elements.clear(); | ||||||
|  | 		componentList.removeAll(); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * @param index | ||||||
|  | 	 * @return | ||||||
|  | 	 * @see java.util.List#get(int) | ||||||
|  | 	 */ | ||||||
|  | 	public E get(int index) { return elements.get(index); } | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Removes the element at a specific index from this model and the corresponding | ||||||
|  | 	 * component from the {@link ComponentList}. | ||||||
|  | 	 *  | ||||||
|  | 	 * @param index | ||||||
|  | 	 * @return the removed element | ||||||
|  | 	 * @see java.util.List#remove(int) | ||||||
|  | 	 */ | ||||||
|  | 	public E remove(int index) { | ||||||
|  | 		componentList.remove(index); | ||||||
|  | 		return elements.remove(index); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * @return | ||||||
|  | 	 * @see java.util.List#iterator() | ||||||
|  | 	 */ | ||||||
|  | 	public Iterator<E> iterator() { | ||||||
|  | 		return new Iterator<E>() { | ||||||
|  |  | ||||||
|  | 			Iterator<E> iter = elements.iterator(); | ||||||
|  | 			 | ||||||
|  | 			@Override | ||||||
|  | 			public boolean hasNext() { return iter.hasNext(); } | ||||||
|  |  | ||||||
|  | 			@Override | ||||||
|  | 			public E next() { return iter.next(); } | ||||||
|  | 		}; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	void setComponentList(ComponentList<E> componentList) { this.componentList = componentList; } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user