对JAVAFX来说, 图片上的透明部分的任何鼠标事件都不能捕捉到,听起来有点像是bug, 比如下边这个对像你只能在其图片上不秀明部分触发鼠标事件:
ImageView {
x: 0;
y: 0;
image: Image { url: "{__DIR__}myImage.png"}
}
不过可以通过在增加层透明矩形层的方式来解决问题,因为Rectangle对象就算透明也会相应鼠标事件,如下代码所示
Rectangle {//Glass Pane
x: 0;
y: 0;
width: 20;
height: 20;
fill: Color.rgb(0, 0, 0, 0);
}
以下是个在窗口中拖动图片的例子,如图第一张图片只可以拖着不透明的地方拖动,第二张图片可以拖着任何地方(包括透明的部位)来拖动,完整的代码请符见下载(netbeans project)
例子讲解:
Step1.先定义抽象类:
abstract class MyNode extends CustomNode{
var x: Number = 100;
var y: Number = 100;
var xTemp: Number =0;
var yTemp: Number =0;
var img = Image { url: "{__DIR__}myImage.png"};
}
Step2.定义两个子类来显示图片,其中一个多加了一层class pane (透明矩形)来触发鼠标事件
如下这个不带class pane:
class MyNodeWithoutGlassPane extends MyNode{
public override function create(): Node{
return Group {
content: [
ImageView {
x: bind x;
y: bind y;
image: img
}
Text{
x: bind x;
y: bind y;
content: "drag me on opaque part"
}
]
}
}
}
这个带有class pane:
class MyNodeWithGlassPane extends MyNode{
public override function create(): Node{
return Group {
content: [
// Background image
ImageView {
x: bind x;
y: bind y;
image: img;
}
Rectangle {//Glass Pane
x: bind x;
y: bind y;
width: img.width;
height: img.height;
fill: Color.rgb(0, 0, 0, 0);
}
Text{
x: bind x;
y: bind y;
content: "drag me even in transparent part"
}
]
};
}
}
Step3, 最后来写main部分,大体就是建出以上两个子类的对象来,给他们set上x,y做标值并对他们绑定数标事件(onMousePressed 和 onMouseDragged),代码如下
Stage {
scene: Scene {
content: [
MyNodeWithoutGlassPane{
x: 50;
y: 100;
onMousePressed: function(event){
var myNode = event.node as MyNode;
myNode.xTemp = myNode.x;
myNode.yTemp = myNode.y;
}
onMouseDragged: function(event){
var myNode = event.node as MyNode;
//println("{event.dragX} {event.dragY}");
myNode.x = myNode.xTemp + event.dragX;
myNode.y = myNode.yTemp + event.dragY
}
}
MyNodeWithGlassPane{
x: 250;
y: 250;
onMousePressed: function(event){
var myNode = event.node as MyNode;
myNode.xTemp = myNode.x;
myNode.yTemp = myNode.y;
}
onMouseDragged: function(event){
var myNode = event.node as MyNode;
//println("{event.dragX} {event.dragY}");
myNode.x = myNode.xTemp + event.dragX;
myNode.y = myNode.yTemp + event.dragY
}
}
]
}
width: 500
height: 500
title: "Drag Image"
resizable: false
}
完了谢谢阅读:) 祝大家愉快 ^^
分享到:
相关推荐
透明对话框则是指对话框的某些部分或全部具有半透明效果,这使得对话框不会完全遮挡其下的内容。在Windows系统中,我们可以使用Alpha通道来实现透明效果,Alpha通道是一个额外的颜色通道,用于定义颜色的透明度,0...
1. **图形用户界面(GUI)编程**:理解窗口组件、事件处理(如鼠标点击、滚动等)以及如何在界面上添加和操作元素。 2. **透明度控制**:利用编程语言提供的图形库或API(如OpenGL, DirectX, Qt, wxWidgets, JavaFX...
2. **事件处理**:当用户在画图板上进行操作时,比如点击鼠标或移动鼠标,程序需要捕获这些事件并做出响应。这涉及到事件监听器和回调函数,当特定事件发生时,回调函数会被调用执行相应的操作,如绘制线条或改变...
实现这一效果可以利用图形库中的图层叠加、透明度变化和时间函数,例如在Android中使用自定义View或Canvas,iOS中使用Core Animation框架。 3. **任务栏添加图片功能**:任务栏是操作系统界面的重要组成部分,用户...
当用户将鼠标移动到这个窗口上时,就像用放大镜观察物体一样,能看到更细致的图像部分。 在Java中,我们可以使用Swing或JavaFX库来创建GUI组件并实现放大镜效果。这个项目很可能使用了Swing,因为它是Java标准版的...
例如,在Java中,可以使用Swing或JavaFX库来加载PNG图像并将其应用到按钮组件上,保持按钮的透明部分不显示背景。在Web开发中,HTML5和CSS3可以实现类似的效果,通过设置`background-image`属性引用PNG图片,并利用`...
在计算机编程领域,尤其是图形用户界面(GUI)开发中...4. 透明度控制:调整组件的透明度属性,使框架能够部分透明,允许背景内容可见。 理解并掌握这些知识点,将有助于开发者构建具有交互性和动态性的GUI应用程序。
总结来说,"不规则的图片按钮(重写按钮的形貌)"是一个关于如何使用图像和编程技术来创造独特、具有吸引力的用户界面元素的主题。它涉及到图形设计、用户交互和编程技术的结合,是提升应用视觉效果和用户体验的重要...
例如,在使用HTML、CSS和JavaScript构建网页应用时,可以使用CSS的`background-image`属性设置按钮的背景图片,而在桌面应用开发中,如使用JavaFX或.NET Framework,可以将这些图片作为控件的皮肤进行应用。...
"PaintFX" 是一个使用 JavaFX 编写的绘图程序项目,它允许用户在屏幕上自由绘制,实现基本的绘画和图像编辑功能。这个类项目可能包含以下特性: 1. **画笔工具**:提供不同颜色、粗细和透明度的画笔,让用户可以...
5. **事件监听**:设置滚动条的滚动事件监听器,当滑块位置改变时,根据滚动条的值更新图片在`PICTURE控件`中的显示范围。 6. **平移操作**:计算滚动条的新位置对应的图片显示区域,然后更新`PICTURE控件`的显示,...
1. **图形用户界面(GUI)**:在Java中,可以使用Swing或JavaFX库来构建连连看游戏的界面。用户界面需要包含游戏面板、计时器、分数显示、操作提示等元素。这些元素通常由JPanel、JButton、JLabel等组件组成,通过布局...
1. **事件处理**:在大多数UI框架或库中,如Windows Forms、WPF、Qt、JavaFX、Android、iOS等,都有专门的拖放事件处理机制。例如,开发者需要监听`MouseDown`、`MouseMove`和`MouseUp`事件,以跟踪用户是否开始拖动...
在“Java 画图”这个标签中,我们可以推测软件的核心部分可能涉及到Java的Swing或JavaFX库来构建图形用户界面,这两个库提供了丰富的组件和工具,用于创建复杂的交互式应用。Swing是早期的GUI库,而JavaFX则更现代,...
在Java Swing或JavaFX等图形用户界面(GUI)库中,我们可以使用特定组件来实现这样的功能。 "TextPane"是Java Swing中的一种组件,主要用于显示和编辑多行文本。它支持基本的格式化,如字体、大小和颜色的改变,但...
这通常需要使用到前端技术,如JavaFX、Qt或Android Studio中的布局管理器。 2. **随机数生成**:中奖信息的生成是随机的,这需要利用编程语言内置的随机数生成函数。例如,在Java中可以使用`java.util.Random`类,...
标题中的“用JAVA编制Internet电子白板软件”指的是使用Java编程语言开发的一款可以在互联网上使用的交互式电子白板应用程序。这种软件通常允许用户在虚拟的白板上进行绘图、书写、标注,甚至进行协作,适用于远程...
2. **事件处理**:游戏中的交互,如玩家控制飞机移动、射击等,都需要监听键盘或鼠标事件。Java的AWT和Swing库提供了事件监听机制,通过实现EventListener接口和相关的事件处理方法,我们可以捕捉到用户的输入并作出...
每种语言都有其特定的语法和库,例如C++可能使用SFML或SDL库,Python可能使用Pygame,Java可能使用JavaFX或Swing。 3. **图形用户界面**:游戏界面包括方块显示区域、得分显示、控制按钮等元素。这通常需要对GUI...