170 lines
5.6 KiB
Java
170 lines
5.6 KiB
Java
package envoy.client.ui;
|
|
|
|
import javafx.beans.property.BooleanProperty;
|
|
import javafx.beans.property.ObjectProperty;
|
|
import javafx.beans.property.StringProperty;
|
|
import javafx.event.ActionEvent;
|
|
import javafx.event.EventHandler;
|
|
import javafx.scene.control.*;
|
|
import javafx.scene.image.ImageView;
|
|
import javafx.scene.layout.Background;
|
|
import javafx.scene.layout.ColumnConstraints;
|
|
import javafx.scene.layout.GridPane;
|
|
|
|
/**
|
|
* This class offers a text field that is automatically equipped with a clear
|
|
* button.
|
|
* <p>
|
|
* Project: <strong>envoy-client</strong><br>
|
|
* File: <strong>ClearableTextField.java</strong><br>
|
|
* Created: <strong>25.06.2020</strong><br>
|
|
*
|
|
* @author Leon Hofmeister
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public class ClearableTextField extends GridPane {
|
|
|
|
private final TextField textField;
|
|
|
|
private final Button clearButton;
|
|
|
|
/**
|
|
* Constructs a new {@code ClearableTextField} with no initial text and icon
|
|
* size 16.
|
|
*
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public ClearableTextField() { this("", 16); }
|
|
|
|
/**
|
|
* Constructs a new {@code ClearableTextField} with initial text and a
|
|
* predetermined icon size.
|
|
*
|
|
* @param text the text that should be displayed by default
|
|
* @param size the size of the icon
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public ClearableTextField(String text, int size) {
|
|
// initializing the textField and the button
|
|
textField = new TextField(text);
|
|
clearButton = new Button("", new ImageView(IconUtil.loadIconThemeSensitive("clear_button", size)));
|
|
clearButton.setOnAction(e -> textField.clear());
|
|
clearButton.setFocusTraversable(false);
|
|
clearButton.getStyleClass().clear();
|
|
clearButton.setBackground(Background.EMPTY);
|
|
// Adding the two elements to the GridPane
|
|
add(textField, 0, 0, 2, 1);
|
|
add(clearButton, 1, 0, 1, 1);
|
|
// Setting the percent - widths of the two columns.
|
|
// Used to locate the button on the right.
|
|
final var columnConstraints = new ColumnConstraints();
|
|
columnConstraints.setPercentWidth(90);
|
|
getColumnConstraints().add(columnConstraints);
|
|
final var columnConstraints2 = new ColumnConstraints();
|
|
columnConstraints2.setPercentWidth(10);
|
|
getColumnConstraints().add(columnConstraints2);
|
|
}
|
|
|
|
/**
|
|
* @return the underlying {@code textField}
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public TextField getTextField() { return textField; }
|
|
|
|
/**
|
|
* This method offers the freedom to perform custom actions when the
|
|
* {@code clearButton} has been pressed.
|
|
* <p>
|
|
* The default is
|
|
* <b><code> e -> {clearableTextField.getTextField().clear();}</code></b>
|
|
*
|
|
* @param onClearButtonAction the action that should be performed
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public void setClearButtonListener(EventHandler<ActionEvent> onClearButtonAction) { clearButton.setOnAction(onClearButtonAction); }
|
|
|
|
/**
|
|
* @return the current property of the prompt text
|
|
* @see javafx.scene.control.TextInputControl#promptTextProperty()
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final StringProperty promptTextProperty() { return textField.promptTextProperty(); }
|
|
|
|
/**
|
|
* @return the current prompt text
|
|
* @see javafx.scene.control.TextInputControl#getPromptText()
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final String getPromptText() { return textField.getPromptText(); }
|
|
|
|
/**
|
|
* @param value the prompt text to display
|
|
* @see javafx.scene.control.TextInputControl#setPromptText(java.lang.String)
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final void setPromptText(String value) { textField.setPromptText(value); }
|
|
|
|
/**
|
|
* @return the current property of the tooltip
|
|
* @see javafx.scene.control.Control#tooltipProperty()
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final ObjectProperty<Tooltip> tooltipProperty() { return textField.tooltipProperty(); }
|
|
|
|
/**
|
|
* @param value the new tooltip
|
|
* @see javafx.scene.control.Control#setTooltip(javafx.scene.control.Tooltip)
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final void setTooltip(Tooltip value) { textField.setTooltip(value); }
|
|
|
|
/**
|
|
* @return the current tooltip
|
|
* @see javafx.scene.control.Control#getTooltip()
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final Tooltip getTooltip() { return textField.getTooltip(); }
|
|
|
|
/**
|
|
* @return the current property of the context menu
|
|
* @see javafx.scene.control.Control#contextMenuProperty()
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final ObjectProperty<ContextMenu> contextMenuProperty() { return textField.contextMenuProperty(); }
|
|
|
|
/**
|
|
* @param value the new context menu
|
|
* @see javafx.scene.control.Control#setContextMenu(javafx.scene.control.ContextMenu)
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final void setContextMenu(ContextMenu value) { textField.setContextMenu(value); }
|
|
|
|
/**
|
|
* @return the current context menu
|
|
* @see javafx.scene.control.Control#getContextMenu()
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final ContextMenu getContextMenu() { return textField.getContextMenu(); }
|
|
|
|
/**
|
|
* @param value whether this ClearableTextField should be editable
|
|
* @see javafx.scene.control.TextInputControl#setEditable(boolean)
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final void setEditable(boolean value) { textField.setEditable(value); }
|
|
|
|
/**
|
|
* @return the current property whether this ClearableTextField is editable
|
|
* @see javafx.scene.control.TextInputControl#editableProperty()
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final BooleanProperty editableProperty() { return textField.editableProperty(); }
|
|
|
|
/**
|
|
* @return whether this {@code ClearableTextField} is editable
|
|
* @see javafx.scene.control.TextInputControl#isEditable()
|
|
* @since Envoy Client v0.1-beta
|
|
*/
|
|
public final boolean isEditable() { return textField.isEditable(); }
|
|
}
|