Added PrimaryScrollPane class with default scroll pane UI settings
This commit is contained in:
		@@ -1,6 +1,5 @@
 | 
				
			|||||||
package envoy.client.ui;
 | 
					package envoy.client.ui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.awt.Color;
 | 
					 | 
				
			||||||
import java.awt.ComponentOrientation;
 | 
					import java.awt.ComponentOrientation;
 | 
				
			||||||
import java.awt.Font;
 | 
					import java.awt.Font;
 | 
				
			||||||
import java.awt.GridBagConstraints;
 | 
					import java.awt.GridBagConstraints;
 | 
				
			||||||
@@ -20,7 +19,6 @@ import javax.swing.JFrame;
 | 
				
			|||||||
import javax.swing.JList;
 | 
					import javax.swing.JList;
 | 
				
			||||||
import javax.swing.JOptionPane;
 | 
					import javax.swing.JOptionPane;
 | 
				
			||||||
import javax.swing.JPanel;
 | 
					import javax.swing.JPanel;
 | 
				
			||||||
import javax.swing.JScrollPane;
 | 
					 | 
				
			||||||
import javax.swing.JTextPane;
 | 
					import javax.swing.JTextPane;
 | 
				
			||||||
import javax.swing.ListSelectionModel;
 | 
					import javax.swing.ListSelectionModel;
 | 
				
			||||||
import javax.swing.SwingUtilities;
 | 
					import javax.swing.SwingUtilities;
 | 
				
			||||||
@@ -54,17 +52,15 @@ public class ChatWindow extends JFrame {
 | 
				
			|||||||
	private LocalDB	localDB;
 | 
						private LocalDB	localDB;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// GUI components
 | 
						// GUI components
 | 
				
			||||||
	private JPanel			contentPane						= new JPanel();
 | 
						private JPanel				contentPane				= new JPanel();
 | 
				
			||||||
	private PrimaryTextArea	messageEnterTextArea			= new PrimaryTextArea(space);
 | 
						private PrimaryTextArea		messageEnterTextArea	= new PrimaryTextArea(space);
 | 
				
			||||||
	private JList<User>		userList						= new JList<>();
 | 
						private JList<User>			userList				= new JList<>();
 | 
				
			||||||
	private Chat			currentChat;
 | 
						private Chat				currentChat;
 | 
				
			||||||
	private JList<Message>	messageList						= new JList<>();
 | 
						private JList<Message>		messageList				= new JList<>();
 | 
				
			||||||
	private JScrollPane		scrollPane						= new JScrollPane();
 | 
						private PrimaryScrollPane	scrollPane				= new PrimaryScrollPane();
 | 
				
			||||||
	private int				verticalScrollBarMaximumValue	= scrollPane.getVerticalScrollBar().getMaximum();
 | 
						private JTextPane			textPane				= new JTextPane();
 | 
				
			||||||
	private boolean			chatOpened						= false;
 | 
						private PrimaryButton		postButton				= new PrimaryButton("Post");
 | 
				
			||||||
	private JTextPane		textPane						= new JTextPane();
 | 
						private PrimaryButton		settingsButton			= new PrimaryButton("Settings");
 | 
				
			||||||
	private PrimaryButton	postButton						= new PrimaryButton("Post");
 | 
					 | 
				
			||||||
	private PrimaryButton	settingsButton					= new PrimaryButton("Settings");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private static int space = 4;
 | 
						private static int space = 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -115,7 +111,6 @@ public class ChatWindow extends JFrame {
 | 
				
			|||||||
		messageList.setBorder(new EmptyBorder(space, space, space, space));
 | 
							messageList.setBorder(new EmptyBorder(space, space, space, space));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		scrollPane.setViewportView(messageList);
 | 
							scrollPane.setViewportView(messageList);
 | 
				
			||||||
		scrollPane.setBorder(null);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
 | 
							GridBagConstraints gbc_scrollPane = new GridBagConstraints();
 | 
				
			||||||
		gbc_scrollPane.fill			= GridBagConstraints.BOTH;
 | 
							gbc_scrollPane.fill			= GridBagConstraints.BOTH;
 | 
				
			||||||
@@ -210,7 +205,7 @@ public class ChatWindow extends JFrame {
 | 
				
			|||||||
				textPane.setText(currentChat.getRecipient().getName());
 | 
									textPane.setText(currentChat.getRecipient().getName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				messageList.setModel(currentChat.getModel());
 | 
									messageList.setModel(currentChat.getModel());
 | 
				
			||||||
				chatOpened = true;
 | 
									scrollPane.setChatOpened(true);
 | 
				
			||||||
				contentPane.revalidate();
 | 
									contentPane.revalidate();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
@@ -254,35 +249,7 @@ public class ChatWindow extends JFrame {
 | 
				
			|||||||
		messageList.setForeground(theme.getMessageColorChat());
 | 
							messageList.setForeground(theme.getMessageColorChat());
 | 
				
			||||||
		messageList.setBackground(theme.getCellColor());
 | 
							messageList.setBackground(theme.getCellColor());
 | 
				
			||||||
		// scrollPane
 | 
							// scrollPane
 | 
				
			||||||
		scrollPane.setForeground(theme.getBackgroundColor());
 | 
							scrollPane.applyTheme(theme);
 | 
				
			||||||
		scrollPane.setBackground(theme.getCellColor());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// Scroll Bar Styling
 | 
					 | 
				
			||||||
		scrollPane.getVerticalScrollBar().setBackground(theme.getCellColor());
 | 
					 | 
				
			||||||
		scrollPane.getVerticalScrollBar()
 | 
					 | 
				
			||||||
			.setUI(new PrimaryScrollBar(5, theme.getInteractableBackgroundColor(), new Color(theme.getInteractableBackgroundColor().getRGB() - 50),
 | 
					 | 
				
			||||||
					new Color(theme.getInteractableBackgroundColor().getRGB() + 170), true));
 | 
					 | 
				
			||||||
		scrollPane.getHorizontalScrollBar().setBackground(theme.getCellColor());
 | 
					 | 
				
			||||||
		scrollPane.getHorizontalScrollBar()
 | 
					 | 
				
			||||||
			.setUI(new PrimaryScrollBar(5, theme.getInteractableBackgroundColor(), new Color(theme.getInteractableBackgroundColor().getRGB() - 50),
 | 
					 | 
				
			||||||
					new Color(theme.getInteractableBackgroundColor().getRGB() + 170), false));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// Autoscroll
 | 
					 | 
				
			||||||
		scrollPane.getVerticalScrollBar().addAdjustmentListener(e -> {
 | 
					 | 
				
			||||||
			if ((verticalScrollBarMaximumValue - e.getAdjustable().getMaximum()) == 0) { return; }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (chatOpened == true) {
 | 
					 | 
				
			||||||
				e.getAdjustable().setValue(e.getAdjustable().getMaximum());
 | 
					 | 
				
			||||||
				verticalScrollBarMaximumValue	= scrollPane.getVerticalScrollBar().getMaximum();
 | 
					 | 
				
			||||||
				chatOpened						= false;
 | 
					 | 
				
			||||||
				return;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			if (scrollPane.getVerticalScrollBar().getValue() + scrollPane.getVerticalScrollBar().getVisibleAmount()
 | 
					 | 
				
			||||||
					+ 100 >= scrollPane.getVerticalScrollBar().getMaximum()) {
 | 
					 | 
				
			||||||
				e.getAdjustable().setValue(e.getAdjustable().getMaximum());
 | 
					 | 
				
			||||||
				verticalScrollBarMaximumValue = scrollPane.getVerticalScrollBar().getMaximum();
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// messageEnterTextArea
 | 
							// messageEnterTextArea
 | 
				
			||||||
		messageEnterTextArea.setCaretColor(theme.getTypingMessageColor());
 | 
							messageEnterTextArea.setCaretColor(theme.getTypingMessageColor());
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,6 +39,11 @@ public class PrimaryScrollBar extends BasicScrollBarUI {
 | 
				
			|||||||
		this.isVertical		= isVertical;
 | 
							this.isVertical		= isVertical;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public PrimaryScrollBar(Theme theme, boolean isVertical) {
 | 
				
			||||||
 | 
							this(5, theme.getInteractableBackgroundColor(), new Color(theme.getInteractableBackgroundColor().getRGB() - 50),
 | 
				
			||||||
 | 
									new Color(theme.getInteractableBackgroundColor().getRGB() + 170), isVertical);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	protected JButton createDecreaseButton(int orientation) {
 | 
						protected JButton createDecreaseButton(int orientation) {
 | 
				
			||||||
		JButton button = new JButton();
 | 
							JButton button = new JButton();
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										48
									
								
								src/main/java/envoy/client/ui/PrimaryScrollPane.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/main/java/envoy/client/ui/PrimaryScrollPane.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					package envoy.client.ui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.swing.JScrollPane;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Project: <strong>envoy-client</strong><br>
 | 
				
			||||||
 | 
					 * File: <strong>PrimaryScrollPane.java</strong><br>
 | 
				
			||||||
 | 
					 * Created: <strong>15 Dec 2019</strong><br>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class PrimaryScrollPane extends JScrollPane {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static final long serialVersionUID = -4786837444056228439L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private int		verticalScrollBarMaximum	= getVerticalScrollBar().getMaximum();
 | 
				
			||||||
 | 
						private boolean	chatOpened					= false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public PrimaryScrollPane() { setBorder(null); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public void applyTheme(Theme theme) {
 | 
				
			||||||
 | 
							setForeground(theme.getBackgroundColor());
 | 
				
			||||||
 | 
							setBackground(theme.getCellColor());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							getVerticalScrollBar().setBackground(theme.getCellColor());
 | 
				
			||||||
 | 
							getVerticalScrollBar().setUI(new PrimaryScrollBar(theme, true));
 | 
				
			||||||
 | 
							getHorizontalScrollBar().setBackground(theme.getCellColor());
 | 
				
			||||||
 | 
							getHorizontalScrollBar().setUI(new PrimaryScrollBar(theme, false));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Automatic scrolling to the bottom
 | 
				
			||||||
 | 
							getVerticalScrollBar().addAdjustmentListener(e -> {
 | 
				
			||||||
 | 
								if (verticalScrollBarMaximum == e.getAdjustable().getMaximum()) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (chatOpened) {
 | 
				
			||||||
 | 
									e.getAdjustable().setValue(e.getAdjustable().getMaximum());
 | 
				
			||||||
 | 
									verticalScrollBarMaximum	= getVerticalScrollBar().getMaximum();
 | 
				
			||||||
 | 
									chatOpened					= false;
 | 
				
			||||||
 | 
									return;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (getVerticalScrollBar().getValue() + getVerticalScrollBar().getVisibleAmount() + 100 >= getVerticalScrollBar().getMaximum()) {
 | 
				
			||||||
 | 
									e.getAdjustable().setValue(e.getAdjustable().getMaximum());
 | 
				
			||||||
 | 
									verticalScrollBarMaximum = getVerticalScrollBar().getMaximum();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public void setChatOpened(boolean chatOpened) { this.chatOpened = chatOpened; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user