- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在这个最小的例子中,我们可以拖动标签来重新排序:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.stage.Stage;
public class MainApp extends Application {
@Override
public void start(Stage stage) throws Exception {
TabPane tabPane = new TabPane();
tabPane.setTabDragPolicy(TabPane.TabDragPolicy.REORDER);
Tab tab = new Tab("Tab");
tab.setGraphic(new Button("button"));
Tab tab2 = new Tab("Tab");
tab2.setGraphic(new Button("button"));
tabPane.getTabs().addAll(tab, tab2);
Scene scene = new Scene(tabPane);
tabPane.setPrefWidth(600);
tabPane.setPrefHeight(400);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
当鼠标悬停在选项卡名称上时我们可以开始拖动,但当鼠标悬停在按钮(选项卡图形)上时则不能。在这种情况下,按钮会阻止选项卡看到拖动事件。
我不能简单地设置 isMouseTransparant
,因为这会阻止按钮记录自己的鼠标点击。
如何允许用户通过选项卡图形拖动选项卡,同时仍然能够通过单击与图形进行交互?
最佳答案
基于示例模式的解决方案
我建议实现重新排序模式。
当重新排序模式打开时,选项卡标题图形中的节点都被禁用,用户可以单击选项卡标题中的任意位置来拖动和重新排序关联的选项卡。在此期间,用户无法与禁用的图形节点进行交互。
当重新排序模式关闭时,选项卡标题图形中的节点全部启用。用户无法拖动选项卡对其重新排序,但它们可以与图形中的节点交互以执行其功能。
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.util.Objects;
public class MainApp extends Application {
@Override
public void start(Stage stage) throws Exception {
TabPane tabPane = new TabPane();
Tab tab = new Tab("Tab");
tab.setGraphic(new Button("button"));
Tab tab2 = new Tab("Tab");
tab2.setGraphic(new Button("button"));
tabPane.getTabs().addAll(tab, tab2);
ToggleButton reorderModeToggle = new ToggleButton("Reorder Mode");
reorderModeToggle.selectedProperty().addListener((observable, wasSelected, isSelected) -> {
tabPane.getTabs().stream()
.map(Tab::getGraphic)
.filter(Objects::nonNull)
.forEach(graphic -> graphic.setDisable(isSelected));
tabPane.setTabDragPolicy(
isSelected
? TabPane.TabDragPolicy.REORDER
: TabPane.TabDragPolicy.FIXED
);
});
VBox layout = new VBox(10, reorderModeToggle, tabPane);
layout.setPadding(new Insets(10));
Scene scene = new Scene(layout);
tabPane.setPrefWidth(600);
tabPane.setPrefHeight(400);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
如果用户可以动态添加新选项卡,那么您还可以根据重新排序模式适本地初始化它们的禁用状态(或者您可以在 TabPane 中选项卡的列表更改监听器中执行此操作)。我没有为这个额外的可选额外步骤提供逻辑。
讨论为什么提供这种方法
我知道这不是您最初要求的,但这可能是您问题的合理解决方案。
试图使图形控制工作和选项卡的拖动功能也同时可用(对我来说)是非常有问题的,无论是在如何实现这个方面还是在行为方面用户应该期望发生。例如,按下鼠标时会触发按钮,但按下鼠标时也会开始选项卡标题的拖动事件,因此,如果按下标题中的按钮,是否也应该开始拖动事件?目前尚不清楚。
按钮的输入处理由 ButtonSkin 引用的 ButtonBehavior 中的 InputMap 类处理。两者都是非公共(public) API,因此很难尝试覆盖默认行为。私有(private) InputMap 类中有一些方法可以帮助决定按钮的行为是否应该消耗它对其采取行动(鼠标按下或按键)的事件(默认情况下它会)。因此,这可以通过安装您自己的皮肤来完成,复制(大量)私有(private) API 中的功能,并进行一些修改以提供您想要的自定义功能(但我根本不推荐这样做)。
我曾认为使用事件过滤器您将能够提供您所请求的原始功能,并且您可能能够做到这一点,但根据我的调查,这并不容易。
交替讨论
sorifiend 在评论中建议的替代解决方案也可能对您有用:
... option is to not use a button. Try with a label instead (Labels don't capture any events by default), or you could use custom graphics to render the tab header to look however you want, and then it will behave exactly as you want without a button.
或者,您可以放置每个选项卡的所有交互式节点正文,而不是将交互式图形放在标题中,只在标题中保留文本或静态图像,使它们始终可以重新排序。
关于java - 如何通过其图形拖动选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69169175/
我正在使用 gridstack 来显示我的小部件。拖动和调整大小适用于 gridstack 卡,但当我将卡拖到底部时,卡的容器不会滚动。我想在拖动卡片时滚动那个容器。该容器只是一个 div 元素,所有
我目前正在构建一个多个处理的 slider 小部件,并且目前正在实现手势检测器。我有一个问题,如果您用第二根手指触摸/拖动屏幕,检测器会识别它并调用 onDragUpdate 函数,这是我试图禁用的功
我是 AngularJS 的新手,我对当前的项目有点压力,这就是我在这里问的原因。 我看到 AngularJS 有 ng-dragstart 事件( http://docs.ng.dart.ant.c
关于缩放大图像和平移有什么建议吗?最好内联在页面上。 我一直在使用PanoJS(又名GSV2),但是现在越来越多的人使用iPhone/iPad/Android类型的设备,这个库要么太慢,要么旧版本不支
我在尝试拖动 JPanel 时遇到问题。如果我纯粹在 MouseDragged 中将其实现为: public void mouseDragged(MouseEvent me) { me.getS
我有一个需要与屏幕底部对齐的 ImageButton,当我单击并拖动它时,它会随着我的手指移动一定距离,超过该距离它不会远离原点,而是继续跟随我的手指从原点开始的方向。 当我松手时,按钮必须滑回原点。
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我需要一个解决方案来实现拖动和缩放,在不使用矩阵的情况下围绕屏幕 onTouch 事件路由 ImageView。我搜索了很多但所有答案都是用矩阵完成的,因为我在屏幕矩阵中有多个对象不适合我,我想拖动和
我需要一些帮助来拖动 UIView 以显示主视图下方的菜单 View 。 我有两个 UIView。menuView - 包括菜单按钮和标签 和 mainView - 位于 menuView 之上。 我
谷歌地图即使设为 true 也不可拖动/拖动。 重现步骤:在新选项卡中加载带有 map 的页面,检查并在不执行任何操作的情况下转到移动 View 。现在在移动 View 中左右上下拖动 map ,它将
我在绘制和缩放 ImageView 时遇到问题。请帮帮我.. 当我画一些东西然后拖动或缩放图像时 - 绘图保留在原处,如您在屏幕截图中所见。而且我只需要简单地在图片上绘图,并且可以缩放和拖动这张图片。
所以我试图模拟鼠标左键单击和鼠标左键释放来执行一些自动拖放操作。 它目前在 C# Winforms(是的,winforms :|)中并且有点笨拙。 基本上,一旦发送了点击,我希望它根据 Kinect
我有一个巨大的 HTML5 Canvas,我希望它像谷歌地图一样工作:用户可以拖动它并始终只看到它的一小部分(屏幕大小)。它只呈现您在屏幕上可以看到的部分。我该怎么做?你有想法吗? 最佳答案 2 个简
我有以下拖放应用程序代码,它在桌面上按预期工作,但是当我想在移动设备上使用该应用程序时,拖动事件无法按预期工作。我知道触摸事件是必需的,但我不确定如何设置它们和实现这些功能。 .object
我正在使用 react-leaflet map ,我用状态改变了很多 map 属性,但是当使用状态来改变拖动属性时它不起作用。 { this.map = map}}
我知道我可以轻松地允许用户在OpenLayers中选择多个功能/几何图形,但是随后我希望使用户能够轻松地同时拖动/移动所有选定的功能。 使用ModifyFeature控件一次只能移动一个要素...是否
我有一个 Windows Phone 运行时应用程序,我使用 xaml 在 map 上显示图钉。 当我拖动 map 时,控件试图保持在相同位置时会出现一些滞后。 任何帮助,将不胜感
我通常不会提出此类问题/答案,但我想我会这样做,因为我已经看到这个问题被问了 20 多次,但没有一个答案真正有效。简而言之,问题是,如果您在可拖动 jQuery 项目内的任何位置有可滚动内容(over
我确信一定有一种简单的方法可以做到这一点,但到目前为止,我已经花了很长时间在各种兔子洞中没有成功。 我有一个支持拖放的 Collection View 。被拖动的单元格有 UIImageView在 c
如何在两个virtualtreeview之间复制以复制所有列,而不仅仅是第一列? 复制前: 复制后: 最佳答案 树控件不保存任何数据。它不包含要显示的列数据,因此无法复制它。而是,当树控件想要显示任何
我是一名优秀的程序员,十分优秀!