Skip to main content
1 of 2

How ho make this code more simple and optimized

I have this Java code which is used to display accordion with list of connections using JavaFX:

package sqlbrowser.navigation;

import java.util.ArrayList;
import java.util.List;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Bounds;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;

public class Navigation {

    // Object for storing conenctions
    public static List<dataObj> list = new ArrayList<>();
    private ObservableList<dataObj> data;

    public class dataObj {

        private String conenctionname;

        public dataObj(String conenctionname) {
            this.conenctionname = conenctionname;
        }

        public String getConenctionname() {
            return conenctionname;
        }

        public void setConenctionname(String conenctionname) {
            this.conenctionname = conenctionname;
        }
    }

    public void initNavigation(Stage primaryStage, Group root, Scene scene) {

        VBox stackedTitledPanes = createStackedTitledPanes();

        ScrollPane scroll = makeScrollable(stackedTitledPanes);
        scroll.getStyleClass().add("stacked-titled-panes-scroll-pane");
        scroll.setPrefSize(395, 580);
        scroll.setLayoutX(5);
        scroll.setLayoutY(32);

        root.getChildren().add(scroll);

    }

    private ScrollPane makeScrollable(final VBox node) {
        final ScrollPane scroll = new ScrollPane();
        scroll.setContent(node);
        scroll.viewportBoundsProperty().addListener(new ChangeListener<Bounds>() {
            @Override
            public void changed(ObservableValue<? extends Bounds> ov, Bounds oldBounds, Bounds bounds) {
                node.setPrefWidth(bounds.getWidth());
            }
        });
        return scroll;
    }

    /////////////////////////////////////////////////////////////////////////////////////
    // Generate accordition with Connections, Tables and Description
    private VBox createStackedTitledPanes() {
        VBox stackedTitledPanes = new VBox();
        stackedTitledPanes.getChildren().setAll(
                createConnectionsList("Connections"));
        ((TitledPane) stackedTitledPanes.getChildren().get(0)).setExpanded(true);
        stackedTitledPanes.getStyleClass().add("stacked-titled-panes");

        return stackedTitledPanes;
    }

    //////////////////////////////////////////////////////////////////////////////
    // Generate list with Connections
    public TitledPane createConnectionsList(String title) {

        initObject();

        data = FXCollections.observableArrayList(list);

        ListView<dataObj> lv = new ListView<>(data);

        lv.setCellFactory(new Callback<ListView<dataObj>, ListCell<dataObj>>() {
            @Override
            public ListCell<dataObj> call(ListView<dataObj> p) {
                return new ConnectionsCellFactory();
            }
        });
        AnchorPane content = new AnchorPane();
        content.getChildren().add(lv);
        // add to TitelPane
        TitledPane pane = new TitledPane(title, content);
        return pane;
    }

    static class ConnectionsCellFactory extends ListCell<dataObj> {

        @Override
        public void updateItem(dataObj item, boolean empty) {
            super.updateItem(item, empty);
            if (item != null) {
                setText(item.getConenctionname());
            }
        }
    }

    // Insert Some test data
    public void initObject() {

        dataObj test1 = new dataObj("test data 1");
        dataObj test2 = new dataObj("test data 2");

        list.add(test1);
        list.add(test2);

    }
} 

Can you help me to optimize the code to make it much more simple?