您的html是一个小的垂直位置,因为您没有提供宽度。通过提供如下所示的宽度,您将看到一行:
sep.setText("<html><hr style=\"width:100px;\"></html>");
尽管提供了颜色,但您的线条仍然是黑色的事实可能是由以下错误引起的:
https://bugs.openjdk.java.net/browse/JDK-5059678
除了使用hr标签之外,您还可以为组件设置样式,这将为宽度带来更大的灵活性。有了以上内容,分隔符将始终为100 px,这意味着在将基于文本的大/小项目添加到菜单时,它看起来可能不合适
这样的东西可以满足您的需求吗?
private JMenuItem createColoredSeparator(Color color){
JMenuItem separator = new JMenuItem();
separator.setPreferredSize(new Dimension(5,5));
separator.setBackground(color);
separator.setEnabled(false); //make the item unclickable so menu doesn't close
return separator;
}
用法示例:
JMenu menu = new JMenu("Menu");
menu.add(new JMenuItem("VeryLongMenuItemName"));
menu.add(createColoredSeparator(Color.RED));
menu.add(new JMenuItem("MenuItemName"));
要使上面的内容不能用所选颜色填充整个宽度,您可以添加默认颜色的边框,以通过以下编辑隐藏背景的一部分createColoredSeparator
:
separator.setPreferredSize(new Dimension(20,20));
separator.setBorder(BorderFactory.createLineBorder(UIManager.getColor("MenuItem.background"), 8));
更新到以下内容:
private JMenuItem createColoredSeparator(Color color){
JMenuItem separator = new JMenuItem();
separator.setPreferredSize(new Dimension(50,50)); //Increased to highlight whats happening
//Imitate the default raised border
Border raisedBorder = BorderFactory.createBevelBorder(BevelBorder.RAISED,
UIManager.getColor("MenuItem.background"),UIManager.getColor("MenuItem.background").darker());
//Merge the borders with the raised border applied outside of the border concealing part of the background
separator.setBorder(new CompoundBorder(
raisedBorder, BorderFactory.createLineBorder(UIManager.getColor("MenuItem.background"), 8)));
separator.setBackground(color);
separator.setEnabled(false); //make the item un-clickable so menu doesn't close
return separator;
}
提供以下内容:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句