1

在尝试找到使用 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() 加载。目前,这两个组件都在传递到舞台之前添加到面板中。它们包含一个用于处理的 OnClickEvent。

现在到实际问题

如果单击一个组件,我该如何实现,另一个组件也从 css 获得 :pressed?

  • 将 ClickEvent 添加到面板没有任何作用(关于单击任一标签/按钮)
  • 将它们都添加到 HBox,将事件添加到 HBox 工作在这方面,我可以单击任一组件并触发事件,但 :pressed 状态仅应用于您单击的组件。

是否可以向所有孩子发出通知,让他们表现得像被按下一样?由于我们有很多小图标,但文本只有一个背景,因此在整个事物上放置一个标签会浪费大量不必要的图像空间。如果不是一次更改所有 css,这也会导致更改字体颜色的问题(label-over-button-solution.setMouseTransparent(true)不会更改文本标签的字体颜色,因为标签没有注意到按钮被按下)

4

1 回答 1

0

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

为了解决您的问题,我可以提出以下建议:每个节点都有一个 press 属性。您可以在此属性上添加一个侦听器,当它更改为 true 时,在需要的节点上使用 setStyle(String) 方法,并在更改为 false 时使用 setStyle(null | "")。

于 2013-05-02T17:35:25.400 回答