【发布时间】:2017-07-13 18:24:50
【问题描述】:
我目前正在尝试自定义 JMenuItem 的大小以使其更大。从此:
更像这样:
从表面上看,我有几个选择:
1:扩展 JMenuItem 并覆盖 getPreferredSize()。或者我想这样做(这就是上面的图像是如何实现的):
private JMenuItem getCustomMenuItem(String s){
JMenuItem item = new JMenuItem(s){
@Override
public Dimension getPreferredSize(){
return new Dimension(100, 20);
}
};
return item;
}
JMenuItem print = getCustomMenuItem("Print");
但我很确定这是不赞成的,因为布局管理器可能不尊重我给出的尺寸。我可能还需要编写或覆盖其他项目,例如 JCheckBoxMenuItems。
2:我还可以在每个菜单项之间添加水平支柱来处理垂直间距,并在标签的每一侧使用空格来处理菜单的宽度。但这看起来很笨重,当我想对齐文本和图像时可能会导致问题
menu.add(Box.createVerticalStrut(10))
3:或者我可以为每个菜单项添加一个复合边框:
menuItem.setBorder(BorderFactory.createCompoundBorder(menuItem.getBorder(), new EmptyBorder(5,5,5,5)))
4:或者以某种方式告诉外观来设置菜单项宽度 - 我不太明白。
还有其他方法可以做到这一点吗?方法 1 有效,但我认为添加复合边框可能是我应该采用的方式。我想我可以扩展 JMenuItem 并将边框添加到自定义项目(这也将允许我投射 JCheckBoxMenuItem)?
感谢您提供任何帮助,但还没有真正找到明确的答案,并且想知道更普遍地自定义组件的最佳做法是什么,同时避免整个 get/set preferredSize() 陷阱。
【问题讨论】:
-
“我目前正在尝试自定义 JMenuItem 的大小以使其更大。” ...为什么?
-
上图有点极端(我只是输入了 100 宽度来测试它是否有效),但我确实认为默认尺寸看起来局促。我只是希望能够稍微改变视觉效果
-
不推荐吗?