编辑:Calrification-标签内容是窗格(VBox,GridPane,等等),所以直接在内容上设置ContextMenu是不可能的。
我可以看到两个解决办法。一种是在选项卡窗格上设置单个上下文菜单。用selected选项卡注册一个侦听器,并在选择更改时重新填充上下文菜单。
另一个解决方案只是在选项卡的内容上设置上下文菜单。请注意,您可以通过注册ContextMenuRequested
事件的处理程序在任何节点上设置上下文菜单,并显示上下文菜单。您可以在选项卡上设置相同的上下文菜单。
此示例演示了这两种技术:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class TabPanesWithContextMenu extends Application {
@Override
public void start(Stage primaryStage) {
TabPane tabPane1 = new TabPane();
ContextMenu contextMenu = new ContextMenu();
tabPane1.setContextMenu(contextMenu);
List<MenuItem> tab1Items = new ArrayList<>();
tab1Items.add(new MenuItem("Choice 1"));
tab1Items.add(new MenuItem("Choice 2"));
List<MenuItem> tab2Items = new ArrayList<>();
tab2Items.add(new MenuItem("Choice 3"));
tab2Items.add(new MenuItem("Choice 4"));
Tab tab1 = new Tab("Tab 1");
tab1.setContent(new Pane());
Tab tab2 = new Tab("Tab 2");
tab2.setContent(new Pane());
tabPane1.getTabs().addAll(tab1, tab2);
Map<Tab, List<MenuItem>> itemsByTab = new HashMap<>();
itemsByTab.put(tab1, tab1Items);
itemsByTab.put(tab2, tab2Items);
tabPane1.getSelectionModel().selectedItemProperty().addListener((obs, oldTab, newTab) ->
contextMenu.getItems().setAll(itemsByTab.get(newTab)) );
contextMenu.getItems().addAll(tab1Items);
TabPane tabPane2 = new TabPane();
Tab tab3 = createTabWithContextMenu("Tab 3", new MenuItem("Choice 5"), new MenuItem("Choice 6"));
Tab tab4 = createTabWithContextMenu("Tab 4", new MenuItem("Choice 7"), new MenuItem("Choice 8"));
tabPane2.getTabs().addAll(tab3, tab4);
HBox root = new HBox(10, tabPane1, tabPane2);
primaryStage.setScene(new Scene(root, 600, 600));
primaryStage.show();
}
private Tab createTabWithContextMenu(String title, MenuItem... items) {
Tab tab = new Tab(title);
ContextMenu contextMenu = new ContextMenu(items);
tab.setContextMenu(contextMenu);
Pane content = new Pane();
content.setOnContextMenuRequested(e ->
contextMenu.show(content, e.getScreenX(), e.getScreenY()));
tab.setContent(content);
return tab ;
}
public static void main(String[] args) {
launch(args);
}
}
我有w3schools预先编写的代码。com和我正在努力为所选选项提供背景色。也就是说,在按下其中一个选项时,浏览器会对所选页面产生负面影响,然后在目标页面上,我希望突出显示该选项,以通过为其指定特殊背景颜色来表示所显示的页面。
我使用BottomNavigationView切换片段。如何获取当前选中的菜单项,以防止重新打开片段?
我在Visual Studio C#IDE中定义了一个ContextMenuStri上下文菜单,并对程序进行编码,以便当用户右键单击屏幕上的一个对象时,上下文菜单成功弹出。用户可以从上下文菜单中选择一个项目,代码成功确定用户选择了哪个上下文菜单项。到目前为止还不错。问题是上下文菜单接受右键单击作为选择上下文菜单项的机制。当我不小心双击右键单击屏幕上的一个对象时,我注意到了这一点...菜单在第一次单
我的引导菜单中有下拉列表。 我试图在下拉列表中选择选项作为下拉列表的标题,而不是“选择选项”,就像现在一样。我已经尝试了在这个和其他一些网站上找到的几个解决方案,但无法使它们中的任何一个工作。 有人能帮忙吗?
7.2.选项菜单 选项菜单是Android程序中标准的菜单组件。只要用户按下设备的菜单按钮,它就可以从屏幕下方显示出来。 为程序添加选项菜单,我们需要: 新建一个menu.xml表示菜单的内容。 在菜单所在的Activity中添加一个方法onCreateOptionsMenu(),在里面装载menu.xml中的内容。 在onOptionsItemSelected()中响应菜单的事件。
问题内容: 我有以下形式的数据 我想要两个下拉菜单。第一个下拉列表将显示“名称”。当用户从第一个下拉列表中选择名称时,应在第二个下拉列表中填充相应的“版本”。 无效的jsfiddle链接:http://jsfiddle.net/fynVy/174/ 问题答案: 您需要调整HTML模板,以便第一个下拉列表显示服务器名称,并且第二个下拉列表的选项基于所选下拉列表(第一个下拉列表的ngModel)中的版