
【笔记】javafx_TabPane和Tab切换面板组件
发布日期:2021-05-07 06:59:29
浏览次数:17
分类:精选文章
本文共 4759 字,大约阅读时间需要 15 分钟。
Tab面板和菜单面板的组合效果:(与下面的代码无关,详见“”)

import javafx.application.Application;import javafx.beans.value.ChangeListener;import javafx.beans.value.ObservableValue;import javafx.event.Event;import javafx.event.EventHandler;import javafx.geometry.Insets;import javafx.geometry.Pos;import javafx.geometry.Side;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.control.Tab;import javafx.scene.control.TabPane;import javafx.scene.image.ImageView;import javafx.scene.input.MouseEvent;import javafx.scene.layout.*;import javafx.scene.paint.Paint;import javafx.stage.Stage;public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { AnchorPane an = new AnchorPane(); //在 TabPane 上放 Tab TabPane tabPane = new TabPane(); tabPane.setStyle("-fx-background-color:#fffff0"); tabPane.setPrefWidth(300); tabPane.setPrefHeight(300); Tab tab1 = new Tab("tab1");//tab无法设置宽高 Tab tab2 = new Tab("tab2"); Tab tab3 = new Tab("tab3"); HBox hBox = new HBox(10);//间距为10 hBox.setAlignment(Pos.CENTER); //背景类(颜色,圆角,内边距) Background background1 = new Background(new BackgroundFill(Paint.valueOf("#FFF0F5"),new CornerRadii(10.0),new Insets(10))); hBox.setBackground(background1); hBox.getChildren().addAll(new Button("button1"),new Button("button2")); tab1.setContent(hBox); Background background2 = new Background(new BackgroundFill(Paint.valueOf("#F0FFF0"),new CornerRadii(3.0),new Insets(5))); //边框类 颜色 样式 圆角 宽度 Border bor = new Border(new BorderStroke(Paint.valueOf("#FF82AB"),BorderStrokeStyle.DOTTED,new CornerRadii(3.0),new BorderWidths(5))); VBox vBox = new VBox(10); vBox.setAlignment(Pos.CENTER); vBox.setBackground(background2); vBox.setBorder(bor); vBox.getChildren().addAll(new Button("button3"),new Button("button4")); tab2.setContent(vBox); AnchorPane an2 = new AnchorPane(); an2.setStyle("-fx-background-color:#F0E68C"); Button button5 = new Button("button5"); AnchorPane.setLeftAnchor(button5,10.0); AnchorPane.setTopAnchor(button5,10.0); an2.getChildren().addAll(button5); tab3.setContent(an2); tabPane.getTabs().addAll(tab1,tab2,tab3); an.getChildren().addAll(tabPane); AnchorPane.setTopAnchor(tabPane,100.0); AnchorPane.setLeftAnchor(tabPane,100.0); Scene scene = new Scene(an); primaryStage.setScene(scene); primaryStage.setHeight(800); primaryStage.setWidth(800); primaryStage.setTitle("JavaFX"); ImageView img = new ImageView("icon/icon.png"); tab1.setGraphic(img);// tabPane.setRotateGraphic(false);//图片方向跟随 //设置朝向(位置)// tabPane.setSide(Side.RIGHT); primaryStage.show(); //打开和关闭// tab1.setClosable(false);//禁止tab1关闭// tabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE);//都不允许关闭 //禁用tab组件// tab3.setDisable(true); //默认选中// tabPane.getSelectionModel().select(tab2);//默认选中// tabPane.getSelectionModel().selectLast();//默认选中最后一个 //监听tabpane组件的改变 tabPane.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Tab oldValue, Tab newValue) { System.out.println("这是 = " + newValue.getText()); } }); //监听tab的状态改变 tab1.setOnSelectionChanged(new EventHandler () { @Override public void handle(Event event) { Tab t = (Tab)event.getSource(); System.out.println("tab1被改变了 - " + t.getText()); } }); an.setOnMouseClicked(new EventHandler () { //点击就添加一个tab @Override public void handle(MouseEvent event) { tabPane.getTabs().add(new Tab("新tab")); } }); //下面这两个都对tab的关闭做出响应,如果不设置event.consume()的话 tab1.setOnClosed(new EventHandler () { @Override public void handle(Event event) { System.out.println("tab1.setOnClosed"); } }); tab1.setOnCloseRequest(new EventHandler () { @Override public void handle(Event event) { System.out.println("tab1.setOnCloseRequest"); event.consume();//阻止事件传递("超纲"),只有这里做出响应 } }); }}
效果:

参考:
https://www.bilibili.com/video/BV1Dt411Z7BN发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月27日 09时23分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【普及模拟】交换
2021-05-07
椭圆曲线密码系统——椭圆曲线
2021-05-07
Vue实现选项卡功能
2021-05-07
数据结构——链表
2021-05-07
【Python】面向对象,封装
2021-05-07
接口又是个啥?
2021-05-07
uni-app请求头中携带token
2021-05-07
常用的 Git 命令和小技巧(1)
2021-05-07
vue中接收后台的图片验证码并显示
2021-05-07
springboot入门(1)---整合MyBatis
2021-05-07
Vue入门学习笔记(1)
2021-05-07
ECharts——双向柱状图
2021-05-07
Vue——引进bootstrap
2021-05-07
趣谈win10常用快捷键
2021-05-07
数学建模(NO.18灰色预测)
2021-05-07
数学建模更新12(数学线性规划模型1)
2021-05-07
Android,SharedPreferences的使用
2021-05-07
华为hybrid vlan配置
2021-05-07
OSPF路由重分发配置实例
2021-05-07