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