2013-04-30 81 views
1

尝试找到Centering Text on a Button with Offset的解决方案后,我现在正在执行一个自定义组件。 我们的目标是制作一个按钮式组件,其一侧有一个图标,中间文本则填充按钮的其余部分。所有孩子的设置状态与父母相同

该组件包含两个标签/按钮来显示图标和文本。他们都有一个背景图片,在CSS中定义。

的CSS看起来像这样为图标,并用交换图像作为背景的文本文本

#button-icon-cancel{ 
    -fx-font-family: "Arial"; 
    -fx-padding: 0,0,0,0; 
    -fx-background-color: transparent; 
    -fx-font-size: 28px; 
    -fx-graphic: url('images/button/cancel.png'); 
} 

#button-icon-cancel:pressed{ 
    -fx-graphic: url('images/button/cancel-pressed.png'); 
} 

的图像由SETID()加载。目前,这两个组件在传递到舞台之前都会添加到Panel中。它们包含一个用于处理的OnClickEvent。

我们的实际问题

我怎样才能做到这一点,如果单击一个组件,另一种是获取:从CSS压制呢?

  • 添加ClickEvent该小组正在做什么(无论是标签/按钮就点击)
  • 添加他们都到HBox中,添加事件和hbox的工作,在这方面,我可以点击组件和事件被触发,但是:按下的状态仅适用于您单击的组件。

是否有可能给所有孩子的通知,他们应该表现得像他们被按下?由于我们有很多小图标,但只有一个文本背景,因此在整个事物上放置一个Label会造成很多不必要的浪费图像空间。如果不是所有的css一次被改变,这也会导致改变字体颜色的问题(由于标签没有注意到按钮被按下,带有.setMouseTransparent(true)的标签按钮解决方案不会改变文本标签的字体颜色)

回答

0

首先,JFX-8将支持更广泛的css改进,这将使您更容易解决问题。

为了解决你的问题,我可以建议如下:每个节点都有一个按下的属性。你可以在这个属性上添加一个监听器,当它更改为true时,可以在需要的节点上使用setStyle(String)方法,并使用setStyle(null |“”)更改为false。