Javafx 2 仅当双击选项卡名称时调整选项卡大小

Javafx 2 仅当双击选项卡名称时调整选项卡大小,javafx-2,javafx,javafx-8,Javafx 2,Javafx,Javafx 8,我有一个代码,当它被点击两次时,无论我在哪里点击标签,它都会调整标签的大小 VBox stackedTitledPanes = createStackedTitledPanes(); ScrollPane scroll = makeScrollable(stackedTitledPanes); final TabPane tabPane = new TabPane(); final BorderPane mainPane = new Borde

我有一个代码,当它被点击两次时,无论我在哪里点击标签,它都会调整标签的大小

VBox stackedTitledPanes = createStackedTitledPanes();

        ScrollPane scroll = makeScrollable(stackedTitledPanes);

        final TabPane tabPane = new TabPane();
        final BorderPane mainPane = new BorderPane();

        final Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();

        tabPane.setStyle("-fx-font-size: 12pt;"); // Set global size for the font
        // Create Tabs
        Tab tabA = new Tab();

        tabPane.setOnMouseClicked(new EventHandler<MouseEvent>()
        {
            private double sizeX, sizeY;
            private boolean first = true;

            @Override
            public void handle(MouseEvent me)
            {
                if (first)
                {
                    sizeX = mainPane.getWidth();
                    sizeY = mainPane.getHeight();
                    first = false;
                }

                if (me.getButton().equals(MouseButton.PRIMARY) && me.getClickCount() % 2 == 0)
                {
                    if (sizeX != mainPane.getWidth() || sizeY != mainPane.getHeight())
                    {
                        mainPane.setPrefSize(sizeX, sizeY);

                    }
                    else
                    {
                        mainPane.setPrefSize(primaryScreenBounds.getWidth(), primaryScreenBounds.getHeight());
                    }
                }
            }
        });

        tabA.setText("Main Component");
        tabA.setContextMenu(makeTabContextMenu(tabA, tabPane));  // Set right mouse click menu
        // Add something in Tab
        StackPane tabA_stack = new StackPane();
        tabA_stack.setAlignment(Pos.CENTER);
        tabA_stack.getChildren().add(scroll);
        tabA.setContent(tabA_stack);
        tabPane.getTabs().add(tabA);

        Tab tabB = new Tab();
        tabB.setText("Second Component");
        tabB.setContextMenu(makeTabContextMenu(tabB, tabPane));  // Set right mouse click menu
        // Add something in Tab
        StackPane tabB_stack = new StackPane();
        tabB_stack.setAlignment(Pos.CENTER);
        tabB_stack.getChildren().add(new Label("Label@Tab B"));
        tabB.setContent(tabB_stack);
        tabPane.getTabs().add(tabB);

        Tab tabC = new Tab();
        tabC.setText("Last Component");
        tabC.setContextMenu(makeTabContextMenu(tabC, tabPane));  // Set right mouse click menu
        // Add something in Tab
        StackPane tabC_vBox = new StackPane();
        tabC_vBox.setAlignment(Pos.CENTER);
        tabC_vBox.getChildren().add(new Label("Label@Tab C"));
        tabC.setContent(tabC_vBox);
        tabPane.getTabs().add(tabC);

        mainPane.setCenter(tabPane);
        mainPane.setPrefSize(300, 500);
        //mainPane.setLayoutX(5);     // Horizontal Position
        mainPane.setLayoutY(32);    // Vertical Position

        scroll.setPrefSize(395, 580);
        scroll.setLayoutX(5);
        scroll.setLayoutY(32);
VBox stackedTitledPanes=createStackedTitledPanes();
ScrollPane scroll=可滚动(堆叠标题窗格);
final TabPane TabPane=新TabPane();
最终边框窗格主窗格=新边框窗格();
最终矩形2D primaryScreenBounds=Screen.getPrimary().getVisualBounds();
tabPane.setStyle(“-fx字体大小:12pt;”)//设置字体的全局大小
//创建选项卡
Tab tabA=新Tab();
tabPane.setOnMouseClicked(新的EventHandler()
{
私人双人sizeX,sizeY;
private boolean first=true;
@凌驾
公共无效句柄(MouseEvent me)
{
如果(第一)
{
sizeX=mainPane.getWidth();
sizeY=mainPane.getHeight();
第一个=假;
}
如果(me.getButton().equals(MouseButton.PRIMARY)和&me.getClickCount()%2==0)
{
如果(sizeX!=mainPane.getWidth()| | sizeY!=mainPane.getHeight())
{
mainPane.setPrefSize(sizeX,sizeY);
}
其他的
{
setPrefSize(primaryScreenBounds.getWidth(),primaryScreenBounds.getHeight());
}
}
}
});
tabA.setText(“主要成分”);
tabA.setContextMenu(makeTabContextMenu(tabA,tabPane));//设置鼠标右键单击菜单
//在选项卡中添加内容
StackPane tabA_stack=新StackPane();
tabA_堆栈设置对齐(位置中心);
tabA_stack.getChildren().add(滚动);
tabA.setContent(tabA_堆栈);
tabPane.getTabs().add(tabA);
Tab tabB=新选项卡();
表B.setText(“第二部分”);
tabB.setContextMenu(makeTabContextMenu(tabB,tabPane));//设置鼠标右键单击菜单
//在选项卡中添加内容
StackPane tabbu stack=新StackPane();
选项卡堆栈设置对齐(位置中心);
tabB_stack.getChildren()添加(新标签(“Label@Tab(二);;
tabB.setContent(tabB_堆栈);
tabPane.getTabs().add(tabB);
Tab tabC=新选项卡();
表C.setText(“最后一个组件”);
tabC.setContextMenu(makeTabContextMenu(tabC,tabPane));//设置鼠标右键单击菜单
//在选项卡中添加内容
StackPane选项卡cu vBox=新建StackPane();
tabcvbox.设置对齐(位置中心);
tabcvbox.getChildren().add(新标签Label@Tab(C);;
tabC.setContent(tabC_vBox);
tabPane.getTabs().add(tabC);
主窗格。设置中心(选项卡窗格);
主窗格。setPrefSize(300500);
//主窗格。setLayoutX(5);//水平位置
主窗格。设置布局(32);//垂直位置
scroll.setPrefSize(395580);
滚动.setLayoutX(5);
滚动设置布局(32);
您能告诉我如何修改代码,使其仅在双击选项卡名称时才能调整选项卡的大小吗?

为了简单起见

创建一个EventHandler

EventHandler eventHandler = new EventHandler<MouseEvent>()
        {
            @Override
            public void handle(MouseEvent me)
            {
             if (mouseEvent.getButton().equals(MouseButton.PRIMARY)) {
                if (mouseEvent.getClickCount() == 2) {
                 ...
                 ...


                 ...

              } }
            }
        }

这是您唯一的选择。

使用setGraphic(节点);方法,并将listner添加到该节点。查看您的问题是的,但据我所知,当我使用
setGraphic(Node)时我必须为每个选项卡创建
setOnMouseClicked
。我如何通过只将
setOnMouseClicked
添加到
tabPane
来全局执行此操作?这是不合理的。您必须手动检查哪个标签被击中。听戴夫的回答。
node.setOnMouseClicked(eventHandler);