jAVAFX实现左侧菜单栏并带收缩效果
时间: 2024-05-16 20:16:02 浏览: 25
要实现左侧菜单栏并带收缩效果,可以使用JavaFX的TreeView组件。以下是一个简单的实现示例:
```java
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
// 创建TreeView
TreeView<String> treeView = new TreeView<>();
TreeItem<String> rootItem = new TreeItem<>("Root");
rootItem.setExpanded(true);
TreeItem<String> item1 = new TreeItem<>("Item 1");
rootItem.getChildren().add(item1);
TreeItem<String> item2 = new TreeItem<>("Item 2");
rootItem.getChildren().add(item2);
treeView.setRoot(rootItem);
// 创建左侧面板
SplitPane leftPane = new SplitPane();
leftPane.getItems().add(treeView);
// 创建中间面板
BorderPane centerPane = new BorderPane();
centerPane.setTop(new Label("Center Pane"));
// 创建主面板
SplitPane mainPane = new SplitPane();
mainPane.getItems().addAll(leftPane, centerPane);
// 监听TreeView的选中事件
treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() {
@Override
public void changed(ObservableValue<? extends TreeItem<String>> observable, TreeItem<String> oldValue, TreeItem<String> newValue) {
centerPane.setTop(new Label(newValue.getValue()));
}
});
// 创建场景
Scene scene = new Scene(mainPane, 600, 400);
// 设置舞台
primaryStage.setTitle("JavaFX TreeView Demo");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
```
以上示例代码创建了一个包含左侧菜单栏和中间面板的主面板,使用SplitPane实现了左右分割。左侧菜单栏使用TreeView组件实现,可以通过设置TreeItem的子节点来添加菜单项。监听TreeView的选中事件,可以在中间面板显示选中的菜单项。
要实现收缩效果,可以在左侧面板中添加一个ToggleButton,通过监听ToggleButton的选中状态来切换左侧面板的显示和隐藏。以下是修改后的示例代码:
```java
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
// 创建TreeView
TreeView<String> treeView = new TreeView<>();
TreeItem<String> rootItem = new TreeItem<>("Root");
rootItem.setExpanded(true);
TreeItem<String> item1 = new TreeItem<>("Item 1");
rootItem.getChildren().add(item1);
TreeItem<String> item2 = new TreeItem<>("Item 2");
rootItem.getChildren().add(item2);
treeView.setRoot(rootItem);
// 创建左侧面板
StackPane leftPane = new StackPane();
leftPane.getChildren().add(treeView);
ToggleButton toggleButton = new ToggleButton("收起");
toggleButton.selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if (newValue) {
leftPane.setMaxWidth(0);
toggleButton.setText("展开");
} else {
leftPane.setMaxWidth(Double.MAX_VALUE);
toggleButton.setText("收起");
}
}
});
leftPane.getChildren().add(toggleButton);
// 创建中间面板
BorderPane centerPane = new BorderPane();
centerPane.setTop(new Label("Center Pane"));
// 创建主面板
SplitPane mainPane = new SplitPane();
mainPane.setOrientation(Orientation.HORIZONTAL);
mainPane.getItems().addAll(leftPane, centerPane);
// 监听TreeView的选中事件
treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() {
@Override
public void changed(ObservableValue<? extends TreeItem<String>> observable, TreeItem<String> oldValue, TreeItem<String> newValue) {
centerPane.setTop(new Label(newValue.getValue()));
}
});
// 创建场景
Scene scene = new Scene(mainPane, 600, 400);
// 设置舞台
primaryStage.setTitle("JavaFX TreeView Demo");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
```
以上代码在左侧面板中添加了一个ToggleButton,通过监听其selectedProperty来控制左侧面板的显示和隐藏。当ToggleButton被选中时,将左侧面板的最大宽度设置为0,实现了收起的效果;当ToggleButton未被选中时,将最大宽度设置为Double.MAX_VALUE,实现了展开的效果。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)