Skip to content

Commit

Permalink
💥 Huge update [Part 3]
Browse files Browse the repository at this point in the history
💥 New controls: MFXCircleToggleNode, MFXRectangleToggleNode, MFXPasswordField

Demo:
♻️ Updated toggles demo to reflect changes made to MFXToggleNode
♻️ Refactored the table views demo. Now the table are shown in a bigger resizable window
✨ Added a new section to show all the icons included in this project, see FontResources

MaterialFX:
MFXCircleToggleNode and MFXRectangleToggleNode:
💥 I decided to split MFXToggleNode into two specialized controls, each with its own skin and features
🔥 MFXToggleNode has been removed

MFXTextField:
✨ Introduced the possibility to add an icon to the field and to adjust its position manually
✨ Added a MFXContextMenu to the field by default

MFXTextFieldSkin:
♻️ Made little adjustments to the layout
♻️ Made little changes to add the new features listed above

MFXPasswordField:
💥 The long awaited MFXPasswordField. Extends MFXTextField and introduces specific features such as: show/hide password, change mask character

MFXTableView:
💥 Even if the codebase is almost the same as before the control has received a huge refactor, new features have been implemented, the layout is now more stable and reliable. It's now possible to change columns at runtime, sort columns manually by using the table's sort model, it's possible to change the observable items list, the table now has a header which is fully customizable even at runtime, the selection model has been completely reviewed from scratch, it's now easier to manually update the table

MFXTableRow:
♻️ Now the rows keep a reference to the represented item. They also include a ripple generator

MFXTableRowCell:
💥 Does not extend Label anymore. Extends Control and defines its own skin. This makes easier to design custom row cells. Now it also offers the possibility of adding up to two icons/nodes to the cell (read the documentation please)

MFXTableColumn (renamed from MFXTableColumnCell):
💥 Does not extend Label anymore. Extends Control and defines its own skin. This makes easier to design custom table columns. The tooltip feature has been reworked, now the columns tooltip is specified by a Supplier and can be changed anytime. Introduced the possibility to disable the DragResizer making the column not resizable, this can be switched anytime as well, this feature also introduces a new pseudo class ":resizable"

MFXFilterDialog, MFXEvaluationBox:
💥 The MFXTableView dialog used for filtering the table has been redesigned to be more appealing. It is also a bit bigger than before
💥 Added two new functions, "Start With Ignore Case" and "Ends With Ignore Case"

MFXComboBoxSkin, MFXFilterComboBoxSkin, ComboSelectionModelMock:
🐛 Fixed selection inconsistencies

MFXContextMenu:
♻️ Set a min width of 100
♻️ Made dispose() method public to allow removing/changing context menus
🐛 Fixed install() method if the node scene is not null

MFXContextMenuItem:
🐛 Fixed constructor oversight

MFXDatePickerContent:
🐛 Fixed MFXDatePicker showing incorrect days (Issue palexdev#33)

MFXFontIcon:
:sparkles: Added a method to get a random icon
:memo: Added/Updated documentation

MFXStepperToggle:
:recycle: Renamed property

MFXStepperToggleSkin:
:recycle: Request layout if the labelTextGap property changes

BindingUtils:
:recycle: Added a new toProperty method for object properties

DragResizer:
:recycle: Added the possibility of enabling/disabling it anytime by adding /removing the needed mouse event filters

FontResources:
:recycle: Whoops, I lost the latest JSON of the icons and I had to redo the whole thing again 🙂

MFXCircleRippleGenerator:
:recycle: Throw NullPointerException if the clip supplier is null or returns null and animateBackground is set to true

RippleClipTypeFactory:
:sparkles: Added methods to specify both arcs if they are the same, and to adjust the clip width/height

StringUtils
:sparkles: Added two new methods

Documentation:
:recycle: Updated
:recycle: Fixed some compiler warnings

Signed-off-by: palexdev <[email protected]>
  • Loading branch information
palexdev committed May 30, 2021
1 parent c2b0c99 commit 2433802
Show file tree
Hide file tree
Showing 72 changed files with 4,494 additions and 2,238 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ out/

# Others
demo/src/main/java/io/github/palexdev/materialfx/demo/TestDemo.java
demo/src/main/resources/io/github/palexdev/materialfx/demo/css/TestDemo.css
materialfx/src/test
demo/scenicView.properties
Original file line number Diff line number Diff line change
Expand Up @@ -118,21 +118,22 @@ public void initialize(URL location, ResourceBundle resources) {

// VLoader
vLoader.setContentPane(contentPane);
vLoader.addItem("BUTTONS", Builder.build(new MFXToggleNode("BUTTONS"), MFXResourcesLoader.load("buttons_demo.fxml")).setDefaultRoot(true));
vLoader.addItem("CHECKBOXES", Builder.build(new MFXToggleNode("CHECKBOXES"), MFXResourcesLoader.load("checkboxes_demo.fxml")));
vLoader.addItem("COMBOBOXES", Builder.build(new MFXToggleNode("COMBOBOXES"), MFXResourcesLoader.load("combo_boxes_demo.fxml")));
vLoader.addItem("DATEPICKERS", Builder.build(new MFXToggleNode("DATEPICKERS"), MFXResourcesLoader.load("datepickers_demo.fxml")));
vLoader.addItem("DIALOGS", Builder.build(new MFXToggleNode("DIALOGS"), MFXResourcesLoader.load("dialogs_demo.fxml")).setControllerFactory(controller -> new DialogsController(demoPane)));
vLoader.addItem("LABELS", Builder.build(new MFXToggleNode("LABELS"), MFXResourcesLoader.load("labels_demo.fxml")));
vLoader.addItem("LISTVIEWS", Builder.build(new MFXToggleNode("LISTVIEWS"), MFXResourcesLoader.load("listviews_demo.fxml")));
vLoader.addItem("NOTIFICATIONS", Builder.build(new MFXToggleNode("NOTIFICATIONS"), MFXResourcesLoader.load("notifications_demo.fxml")));
vLoader.addItem("PROGRESS_SPINNERS", Builder.build(new MFXToggleNode("PROGRESS_SPINNERS"), MFXResourcesLoader.load("progress_spinners_demo.fxml")));
vLoader.addItem("RADIOBUTTONS", Builder.build(new MFXToggleNode("RADIOBUTTONS"), MFXResourcesLoader.load("radio_buttons_demo.fxml")));
vLoader.addItem("SCROLLPANES", Builder.build(new MFXToggleNode("SCROLLPANES"), MFXResourcesLoader.load("scrollpanes_demo.fxml")));
vLoader.addItem("TABLEVIEWS", Builder.build(new MFXToggleNode("TABLEVIEWS"), MFXResourcesLoader.load("tableviews_demo.fxml")));
vLoader.addItem("TEXTFIELDS", Builder.build(new MFXToggleNode("TEXTFIELDS"), MFXResourcesLoader.load("textfields_demo.fxml")));
vLoader.addItem("TOGGLES", Builder.build(new MFXToggleNode("TOGGLES"), MFXResourcesLoader.load("toggle_buttons_demo.fxml")));
vLoader.addItem("TREEVIEWS", Builder.build(new MFXToggleNode("TREEVIEWS"), MFXResourcesLoader.load("treeviews_demo.fxml")));
vLoader.addItem("BUTTONS", Builder.build(new MFXRectangleToggleNode("BUTTONS"), MFXResourcesLoader.load("buttons_demo.fxml")).setDefaultRoot(true));
vLoader.addItem("CHECKBOXES", Builder.build(new MFXRectangleToggleNode("CHECKBOXES"), MFXResourcesLoader.load("checkboxes_demo.fxml")));
vLoader.addItem("COMBOBOXES", Builder.build(new MFXRectangleToggleNode("COMBOBOXES"), MFXResourcesLoader.load("combo_boxes_demo.fxml")));
vLoader.addItem("DATEPICKERS", Builder.build(new MFXRectangleToggleNode("DATEPICKERS"), MFXResourcesLoader.load("datepickers_demo.fxml")));
vLoader.addItem("DIALOGS", Builder.build(new MFXRectangleToggleNode("DIALOGS"), MFXResourcesLoader.load("dialogs_demo.fxml")).setControllerFactory(controller -> new DialogsController(demoPane)));
vLoader.addItem("LABELS", Builder.build(new MFXRectangleToggleNode("LABELS"), MFXResourcesLoader.load("labels_demo.fxml")));
vLoader.addItem("LISTVIEWS", Builder.build(new MFXRectangleToggleNode("LISTVIEWS"), MFXResourcesLoader.load("listviews_demo.fxml")));
vLoader.addItem("NOTIFICATIONS", Builder.build(new MFXRectangleToggleNode("NOTIFICATIONS"), MFXResourcesLoader.load("notifications_demo.fxml")));
vLoader.addItem("PROGRESS_SPINNERS", Builder.build(new MFXRectangleToggleNode("PROGRESS SPINNERS"), MFXResourcesLoader.load("progress_spinners_demo.fxml")));
vLoader.addItem("RADIOBUTTONS", Builder.build(new MFXRectangleToggleNode("RADIOBUTTONS"), MFXResourcesLoader.load("radio_buttons_demo.fxml")));
vLoader.addItem("SCROLLPANES", Builder.build(new MFXRectangleToggleNode("SCROLLPANES"), MFXResourcesLoader.load("scrollpanes_demo.fxml")));
vLoader.addItem("TABLEVIEWS", Builder.build(new MFXRectangleToggleNode("TABLEVIEWS"), MFXResourcesLoader.load("tableviews_demo.fxml")));
vLoader.addItem("TEXTFIELDS", Builder.build(new MFXRectangleToggleNode("TEXTFIELDS"), MFXResourcesLoader.load("textfields_demo.fxml")));
vLoader.addItem("TOGGLES", Builder.build(new MFXRectangleToggleNode("TOGGLES"), MFXResourcesLoader.load("toggle_buttons_demo.fxml")));
vLoader.addItem("TREEVIEWS", Builder.build(new MFXRectangleToggleNode("TREEVIEWS"), MFXResourcesLoader.load("treeviews_demo.fxml")));
vLoader.addItem("FONTRESOURCES", Builder.build(new MFXRectangleToggleNode("FONTRESOURCES"), MFXResourcesLoader.load("fontresources_demo.fxml")));
vLoader.start();

// Others
Expand Down Expand Up @@ -169,7 +170,7 @@ private void initAnimations() {

Timeline fadeOut = MFXAnimationFactory.FADE_OUT.build(navBar, 50);
Timeline close = new Timeline(
new KeyFrame(Duration.millis(300), new KeyValue(navBar.translateXProperty(), -200))
new KeyFrame(Duration.millis(300), new KeyValue(navBar.translateXProperty(), -240))
);
Timeline right = new Timeline(
new KeyFrame(Duration.millis(200), new KeyValue(opNavButton.rotateProperty(), 0))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/*
* Copyright (C) 2021 Parisi Alessandro
* This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
*
* MaterialFX is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MaterialFX is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MaterialFX. If not, see <http://www.gnu.org/licenses/>.
*/

package io.github.palexdev.materialfx.demo.controllers;

import io.github.palexdev.materialfx.controls.MFXFlowlessListView;
import io.github.palexdev.materialfx.controls.MFXIconWrapper;
import io.github.palexdev.materialfx.controls.MFXLabel;
import io.github.palexdev.materialfx.controls.cell.MFXFlowlessListCell;
import io.github.palexdev.materialfx.font.FontResources;
import io.github.palexdev.materialfx.font.MFXFontIcon;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.control.Separator;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;

import java.net.URL;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.ResourceBundle;
import java.util.stream.Collectors;

public class FontResourcesDemoController implements Initializable {

@FXML
private MFXFlowlessListView<HBox> list;


@Override
public void initialize(URL location, ResourceBundle resources) {
list.setCellFactory(hBox -> {
MFXFlowlessListCell<HBox> cell = new MFXFlowlessListCell<>(list, hBox);
cell.setFixedCellHeight(48);
return cell;
});
MFXFlowlessListView.setSmoothScrolling(list);
populateList();
}

private void populateList() {
List<FontResources> fontResources = Arrays.asList(FontResources.values());
fontResources.sort(Comparator.comparing(FontResources::name));


List<HBox> resBoxes = fontResources.stream().map(this::buildNode).collect(Collectors.toList());
list.setItems(resBoxes);
}

private HBox buildNode(FontResources fontResource) {
MFXFontIcon icon = new MFXFontIcon(fontResource.getDescription(), 20);
MFXLabel l1 = new MFXLabel();
l1.setLineColor(Color.TRANSPARENT);
l1.setUnfocusedLineColor(Color.TRANSPARENT);
l1.setStyle("-fx-background-color: transparent");
l1.setText("Description: " + fontResource.getDescription());
l1.setMinWidth(300);

MFXLabel l2 = new MFXLabel();
l2.setLineColor(Color.TRANSPARENT);
l2.setUnfocusedLineColor(Color.TRANSPARENT);
l2.setStyle("-fx-background-color: transparent");
l2.setText("Code: " + Integer.toHexString(fontResource.getCode() | 0x10000).substring(1).toUpperCase());
l2.setMinWidth(300);

Separator s1 = new Separator(Orientation.VERTICAL);
s1.setStyle("-fx-fill: white");
Separator s2 = new Separator(Orientation.VERTICAL);
s2.setStyle("-fx-fill: white");


HBox box = new HBox(10, new MFXIconWrapper(icon, 24), s1, l1, s2, l2);
box.setPadding(new Insets(5));
box.setAlignment(Pos.CENTER_LEFT);
return box;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,44 +20,71 @@

import io.github.palexdev.materialfx.controls.MFXButton;
import io.github.palexdev.materialfx.controls.MFXTableView;
import io.github.palexdev.materialfx.controls.cell.MFXTableColumnCell;
import io.github.palexdev.materialfx.controls.cell.MFXTableColumn;
import io.github.palexdev.materialfx.controls.cell.MFXTableRowCell;
import io.github.palexdev.materialfx.controls.legacy.MFXLegacyTableView;
import io.github.palexdev.materialfx.demo.model.FilterablePerson;
import io.github.palexdev.materialfx.demo.model.Person;
import javafx.application.Platform;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.layout.StackPane;
import javafx.stage.Modality;
import javafx.stage.Stage;

import java.net.URL;
import java.util.Comparator;
import java.util.List;
import java.util.ResourceBundle;

public class TableViewsDemoController implements Initializable {
private final ObjectProperty<Stage> tableStage = new SimpleObjectProperty<>();
private final MFXLegacyTableView<Person> legacyTable;
private final MFXTableView<FilterablePerson> tableView;
private final StackPane stackPane = new StackPane();
private final Scene scene = new Scene(stackPane, 800, 600);

@FXML
private MFXButton switchButton;
private MFXButton showLegacy;

@FXML
private MFXLegacyTableView<Person> legacyTable;
private MFXButton showNew;

@FXML
private MFXTableView<FilterablePerson> table;
public TableViewsDemoController() {
tableStage.addListener((observable, oldValue, newValue) -> {
getTableStage().initOwner(showLegacy.getScene().getWindow());
getTableStage().initModality(Modality.APPLICATION_MODAL);
});

Platform.runLater(() -> tableStage.set(new Stage()));

legacyTable = new MFXLegacyTableView<>();
tableView = new MFXTableView<>();
}

@Override
public void initialize(URL location, ResourceBundle resources) {
switchButton.setOnAction(event -> {
if (legacyTable.isVisible()) {
legacyTable.setVisible(false);
table.setVisible(true);
} else {
legacyTable.setVisible(true);
table.setVisible(false);
}
showLegacy.setOnAction(event -> {
getTableStage().close();
stackPane.getChildren().setAll(legacyTable);
getTableStage().setScene(scene);
getTableStage().setTitle("Legacy TableView - Preview");
getTableStage().show();
});

showNew.setOnAction(event -> {
getTableStage().close();
stackPane.getChildren().setAll(tableView);
getTableStage().setScene(scene);
getTableStage().setTitle("New TableView - Preview");
getTableStage().show();
});

populateLegacy();
Expand Down Expand Up @@ -112,22 +139,30 @@ private void populateTable() {
)
);

MFXTableColumnCell<FilterablePerson> firstNameColumn = new MFXTableColumnCell<>("First Name", Comparator.comparing(FilterablePerson::getFirstName));
firstNameColumn.setRowCellFactory(person -> new MFXTableRowCell(person.firstNameProperty()));
MFXTableColumnCell<FilterablePerson> lastNameColumn = new MFXTableColumnCell<>("Last Name", Comparator.comparing(FilterablePerson::getLastName));
lastNameColumn.setRowCellFactory(person -> new MFXTableRowCell(person.lastNameProperty()));
MFXTableColumnCell<FilterablePerson> addressColumn = new MFXTableColumnCell<>("Address", Comparator.comparing(FilterablePerson::getAddress));
addressColumn.setRowCellFactory(person -> new MFXTableRowCell(person.addressProperty()));
MFXTableColumnCell<FilterablePerson> ageColumn = new MFXTableColumnCell<>("Age", Comparator.comparing(FilterablePerson::getAge));
ageColumn.setRowCellFactory(person -> new MFXTableRowCell(person.ageProperty().asString()) {
MFXTableColumn<FilterablePerson> firstNameColumn = new MFXTableColumn<>("First Name", Comparator.comparing(FilterablePerson::getFirstName));
firstNameColumn.setRowCellFunction(person -> new MFXTableRowCell(person.firstNameProperty()));
MFXTableColumn<FilterablePerson> lastNameColumn = new MFXTableColumn<>("Last Name", Comparator.comparing(FilterablePerson::getLastName));
lastNameColumn.setRowCellFunction(person -> new MFXTableRowCell(person.lastNameProperty()));
MFXTableColumn<FilterablePerson> addressColumn = new MFXTableColumn<>("Address", Comparator.comparing(FilterablePerson::getAddress));
addressColumn.setRowCellFunction(person -> new MFXTableRowCell(person.addressProperty()));
MFXTableColumn<FilterablePerson> ageColumn = new MFXTableColumn<>("Age", Comparator.comparing(FilterablePerson::getAge));
ageColumn.setRowCellFunction(person -> new MFXTableRowCell(person.ageProperty().asString()) {
{
setAlignment(Pos.CENTER_RIGHT);
setRowAlignment(Pos.CENTER_RIGHT);
}
});
ageColumn.setAlignment(Pos.CENTER_RIGHT);
ageColumn.setColumnAlignment(Pos.CENTER_RIGHT);

tableView.setItems(people);
tableView.getTableColumns().addAll(firstNameColumn, lastNameColumn, addressColumn, ageColumn);
}

public Stage getTableStage() {
return tableStage.get();
}

table.setItems(people);
table.getColumns().addAll(firstNameColumn, lastNameColumn, addressColumn, ageColumn);
public void setTableStage(Stage tableStage) {
this.tableStage.set(tableStage);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,21 @@
import io.github.palexdev.materialfx.controls.MFXCheckbox;
import io.github.palexdev.materialfx.controls.MFXDatePicker;
import io.github.palexdev.materialfx.controls.MFXTextField;
import io.github.palexdev.materialfx.font.MFXFontIcon;
import io.github.palexdev.materialfx.utils.BindingUtils;
import javafx.beans.binding.Bindings;
import javafx.beans.property.BooleanProperty;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.paint.Color;

import java.net.URL;
import java.time.LocalDate;
import java.time.Month;
import java.util.ResourceBundle;

public class TextfieldsDemoController implements Initializable {
public class TextFieldsDemoController implements Initializable {

@FXML
private MFXTextField validated;
Expand Down Expand Up @@ -53,6 +55,8 @@ public void initialize(URL location, ResourceBundle resources) {
validated.getValidator().add(checkboxValidation, "Checkbox must be selected");
validated.getValidator().add(datePickerValidation, "Selected date must be 03/10/1911");
validated.setValidated(true);
validated.setIcon(new MFXFontIcon("mfx-variant7-mark", 16, Color.web("#8FF7A7")));
validated.getIcon().visibleProperty().bind(validated.getValidator().validProperty());

label.visibleProperty().bind(validated.getValidator().validProperty());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,34 @@
package io.github.palexdev.materialfx.demo.controllers;

import io.github.palexdev.materialfx.controls.MFXRectangleToggleNode;
import io.github.palexdev.materialfx.controls.MFXToggleButton;
import io.github.palexdev.materialfx.font.MFXFontIcon;
import io.github.palexdev.materialfx.utils.ColorUtils;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;

public class TogglesController {
import java.net.URL;
import java.util.ResourceBundle;

public class TogglesController implements Initializable {

@FXML
private MFXToggleButton toggleButton;

@FXML
private MFXRectangleToggleNode rec1;

@FXML
private MFXRectangleToggleNode rec2;

@Override
public void initialize(URL location, ResourceBundle resources) {
rec1.setLabelLeadingIcon(MFXFontIcon.getRandomIcon(16, ColorUtils.getRandomColor()));
rec1.setLabelTrailingIcon(MFXFontIcon.getRandomIcon(16, ColorUtils.getRandomColor()));
rec2.setLabelLeadingIcon(MFXFontIcon.getRandomIcon(16, ColorUtils.getRandomColor()));
rec2.setLabelTrailingIcon(MFXFontIcon.getRandomIcon(16, ColorUtils.getRandomColor()));
}

@FXML
private void handleButtonClick() {
toggleButton.setToggleColor(ColorUtils.getRandomColor());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,25 +76,23 @@
-fx-border-color: #7F0FFF;
-fx-border-radius: 6;
-fx-border-insets: -1;
-fx-border-width: 1.2;
-mfx-shape: rectangle;
-mfx-size: 35px;
-fx-pref-width: 160;
}

#vLoader .mfx-toggle-node .text {
-fx-font-family: 'Open Sans Bold';
-fx-fill: #7F0FFF;
-fx-font-size: 13;
#vLoader .mfx-toggle-node .mfx-label {
-mfx-font-family: 'Open Sans Bold';
-mfx-text-fill: #7F0FFF;
-mfx-font-size: 13;
-fx-opacity: 0.7;
}

#vLoader .mfx-toggle-node:hover,
#vLoader .mfx-toggle-node:hover .text {
#vLoader .mfx-toggle-node:hover .mfx-label {
-fx-opacity: 1.0;
}

#vLoader .mfx-toggle-node:selected {
-fx-background-color: white;
-fx-background-color: derive(#7F0FFF, 150%);
-fx-opacity: 1;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
<?import io.github.palexdev.materialfx.controls.MFXVLoader?>
<?import javafx.geometry.*?>
<?import javafx.scene.layout.*?>
<StackPane id="demoPane" fx:id="demoPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="550.0" prefWidth="960.0" stylesheets="@css/demo.css" xmlns="http://javafx.com/javafx/15.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="io.github.palexdev.materialfx.demo.controllers.DemoController">
<StackPane id="demoPane" fx:id="demoPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="550.0" prefWidth="960.0" stylesheets="@css/demo.css" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1" fx:controller="io.github.palexdev.materialfx.demo.controllers.DemoController">
<StackPane id="contentPane" fx:id="contentPane" prefHeight="500.0" prefWidth="441.0">
<StackPane.margin>
<Insets bottom="15.0" left="20.0" right="20.0" top="15.0" />
</StackPane.margin>
</StackPane>
<StackPane id="navBar" fx:id="navBar" maxWidth="-Infinity" style="-fx-background-radius: 10; -fx-background-color: white;" translateX="-200.0" StackPane.alignment="CENTER_LEFT">
<StackPane id="navBar" fx:id="navBar" maxWidth="-Infinity" prefWidth="200.0" style="-fx-background-radius: 10; -fx-background-color: white;" translateX="-240.0" StackPane.alignment="CENTER_LEFT">
<StackPane.margin>
<Insets bottom="15.0" left="15.0" top="15.0" />
</StackPane.margin>
Expand Down
Loading

0 comments on commit 2433802

Please sign in to comment.