【问题标题】:Align JavaFX MenuItem Text on Center居中对齐 JavaFX MenuItem 文本
【发布时间】:2017-07-14 04:29:57
【问题描述】:

我正在尝试使用 css 将以下自定义 MenuItem 文本的对齐方式更改为居中,但我无法实现,我得到以下信息:

作为文本使用Label,并且鼠标没有悬停在LabelMenuItem上方:

作为文本使用common,鼠标悬停在LabelMenuItem

图3[问题是Label宽度小于ContextMenu宽度]:

如您所见,它位于 Left 一侧。我已经使用 css 尝试了一切,但它只是不想改变它的位置


我想达到什么目标?

我需要在一些 ContextMenu MenuItems 上方添加标签。我做到了,但现在我需要将标签的-Text-alignment- 放在中心。

在 css 分析器中,此属性默认为 LEFT


CSS代码(已更新,显示标签宽度问题):

/*******************************************************************************

*                           Label-Menu-Item                            *

******************************************************************************/

.label-menu-item .label{
     -fx-text-alignment:center; 
}

.label-menu-item .label .text{
     -fx-text-alignment:center; 
}


/* When the Label-Menu-Item is disabled [Always it is cause i don't want the user to be able to click it] */
.label-menu-item:disabled {
    -fx-opacity: 1.0;
    -fx-border-color:transparent white white white;
    -fx-cursor:default;
}

.label-menu-item:disabled:hover{
    -fx-background-color: blue;
}

.label-menu-item:disabled .label {
    -fx-opacity: 1.0;
    -fx-font-size:10.0;
    -fx-font-weight:bold;
    -fx-text-fill:white;
    -fx-text-alignment:center; 
}

.label-menu-item:disabled:hover .label {
    -fx-background-color: firebrick;
}

LabelMenuItem.java:

import javafx.scene.control.MenuItem;

/**
 * @author GOXR3PLUS
 *
 */
public class LabelMenuItem extends MenuItem {

    /**
     * Constructor
     * 
     * @param text
     *            The Text of The Menu Item
     * 
     */
    public LabelMenuItem(String text) {
    setText(text);
    setDisable(true);
    getStyleClass().clear();
    getStyleClass().add("label-menu-item");
    }

}

【问题讨论】:

  • 尝试制作MenuItem Label Width == ContextMenu Width 这似乎是css -fx-pref-width:infinity [bugs.openjdk.java.net/browse/JDK-8096649] 的问题,它说已解决,但是当我添加无穷大时,上下文菜单会爆炸(没有显示任何内容) :)
  • @James_D 你能提供一些帮助吗? :) 我会永远高兴..

标签: java javafx text-alignment text-align


【解决方案1】:

如果你试试这个:

.label-menu-item .label{
       //and here
      -fx-text-alignment:center; 
}

.label-menu-item .label .text{
      //and here
      -fx-text-alignment:center; 
}

而不是这个:

.menu-item .label{
       //and here
      -fx-text-alignment:center; 
}

.menu-item .label .text{
      //and here
      -fx-text-alignment:center; 
}

有用吗?

如果不是,也许Label 不会扩展到右边框(即具有与文本完全相同的大小,因此不同的对齐方式不会改变任何东西)?然后尝试改变Label的宽度。

【讨论】:

  • I updated the question using your css code and some more . As you can see from the second image the width of the **Label** is the same as of the ContextMenu :).
  • 如果您以编程方式尝试它,就像测试一样,那么它是否有效?我的意思是:label.setTextAlignment(TextAlignment.Center);
  • MenuItem没有这样的方法...我正在扩展MenuItemLabel不能添加到ContextMenu
  • 在 CSS 中,您将悬停颜色应用于整个标签菜单项,而不仅仅是标签。如果仅将其应用于标签,颜色是否也会填充到右边框?
  • 我也尝试过构建一个MenuButton 并从SceneBuilder 检查它,文本将居中或向右。但是来自PopUpMenu ContextMenu 的文本仍然在左侧。很奇怪……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
相关资源
最近更新 更多