java tabpane_java JavaFX TabPane切换选项卡仅在关注时 - 糯米PHP

我需要在Ctrl-Tab和Ctrl-Shift-Tab上切换选项卡。但是它仅在TabPane处于焦点时才起作用。我有带有setContent(textArea)的标签页。当textArea成为焦点时,然后按Ctrl-Tab,焦点将移至菜单中的某个位置:

TextArea@3f40a15a[styleClass=text-input text-area]

TextArea@7b7c82a4[styleClass=text-input text-area]

TabPane[id=null, styleClass=tab-pane]

TextArea[id=null, styleClass=text-input text-area]

MenuButtonSkinBase$MenuLabeledImpl[id=null, styleClass=label]

TextArea[id=null, styleClass=text-input text-area]

MenuButtonSkinBase$MenuLabeledImpl[id=null, styleClass=label]

TextArea[id=null, styleClass=text-input text-area]

TabPane[id=null, styleClass=tab-pane]

TextArea[id=null, styleClass=text-input text-area]

MenuButtonSkinBase$MenuLabeledImpl[id=null, styleClass=label]

TextArea[id=null, styleClass=text-input text-area]

我跟踪焦点变化是这样的:

scene.focusOwnerProperty().addListener(new ChangeListener() {

@Override

public void changed(ObservableValue extends Node> ov, Node t, Node t1) {

System.out.println(t1);

}

});

我几乎在每个组件(包括菜单,工具栏,textArea和窗格)上都将setFocusTraversable设置为false

我创建了Tabs并使用了setContent(textArea)。

Also I want to requestFocus on textArea every time user open/close tab and switch between tabs(using mouse and keyboard hotkeys).

tabPane.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() {

@Override

public void changed(ObservableValue extends Number> ov, Number t, Number t1) {

Platform.runLater(new Runnable() {

@Override

public void run() {

if (tabPane.getTabs().size() > 0) {

FileTab tab = (FileTab)tabPane.getTabs().get(tabPane.getSelectionModel().getSelectedIndex());

tab.getTextArea().requestFocus();

}

}

});

}

});

This does not work.

I tried tab.getContent().requestFocus() - doesn't work too.

About changing tabs when TabPane child is in focus:

It seems like TabPane gets KeyEvent, but because it's not in focus(textArea in focus), it just skips this event.

Maybe I could duplicate default functionality by firing KeyEvent at TabPane or maybe even re implement it on my own. Or maybe I could call nextTab/previousTab default actions from this listener:

tabPane.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler() {

@Override

public void handle(KeyEvent t) {

if (t.getCode().equals(KeyCode.TAB) && t.isControlDown()) {

//Event.fireEvent(tabPane, event); //I'm not sure how to do it like this

//Maybe it's better to just call default actions on TabPane.

t.consume();

}

}

});

但是我仍然不知道如何在选项卡切换后将焦点设置在TextArea上。也许我应该尝试在一段时间延迟后调用Platform.runLater()?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值