package jcgp.gui; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import javafx.application.Platform; import javafx.event.EventHandler; import javafx.scene.Cursor; import javafx.scene.control.TextArea; import javafx.scene.input.MouseEvent; import javafx.scene.layout.AnchorPane; import jcgp.GUI; public class GUIConsole extends AnchorPane { private boolean dragging; private TextArea textArea = new TextArea("Welcome to JCGP!\n"); public GUIConsole() { super(); textArea.setEditable(false); textArea.setWrapText(true); // System.setOut(new PrintStream(new OutputStream() { // @Override // public void write(final int b) throws IOException { // textArea.appendText(String.valueOf((char) b)); // } // })); setResizeListeners(); AnchorPane.setTopAnchor(textArea, GUI.RESIZE_MARGIN); AnchorPane.setBottomAnchor(textArea, 0.0); AnchorPane.setRightAnchor(textArea, 0.0); AnchorPane.setLeftAnchor(textArea, 0.0); setMinHeight(GUI.CONSOLE_HEIGHT); setPrefHeight(GUI.CONSOLE_HEIGHT); getChildren().add(textArea); } /** * */ private void setResizeListeners() { setOnMousePressed(new EventHandler() { @Override public void handle(MouseEvent event) { // ignore clicks outside of the draggable margin if(isInDraggableZone(event)) { dragging = true; } } }); setOnMouseDragged(new EventHandler() { @Override public void handle(MouseEvent event) { if(dragging) { double newHeight = getHeight() - event.getY(); if (newHeight >= getMinHeight()) { setPrefHeight(newHeight); } else { setPrefHeight(getMinHeight()); } } } }); setOnMouseMoved(new EventHandler() { @Override public void handle(MouseEvent event) { if(isInDraggableZone(event) || dragging) { setCursor(Cursor.V_RESIZE); } else { setCursor(Cursor.DEFAULT); } } }); setOnMouseReleased(new EventHandler() { @Override public void handle(MouseEvent event) { dragging = false; setCursor(Cursor.DEFAULT); } }); textArea.setOnMouseEntered(new EventHandler() { @Override public void handle(MouseEvent event) { setCursor(Cursor.DEFAULT); } }); } private boolean isInDraggableZone(MouseEvent event) { return event.getY() < (GUI.RESIZE_MARGIN); } public TextArea getTextArea() { return textArea; } }