- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 JPopupMenu
的顶部添加一个标签,其中包含其他 JMenuItem
。到目前为止,一切都很好。出现问题是因为我的标签在其左侧有一个图标,就像“普通”JMenuItem
一样,但其他项目不会像使用 JMenuItem< 那样遵循标签对齐方式
。像这样:
第一项是带有图标的 JMenuItem
。请注意,所有其他 JMenuItem
将遵循具有较宽图标的文本对齐方式。
现在,如果我将带有图标的 JLabel
添加到 JPopupMenu
,效果将不一样:
或者更糟糕的是,如果我将一个没有图标的 JLabel
添加到一个包含其他带有图标的 JMenuItem
的 JPopupMenu
中,标签将获胜' 遵循另一个的对齐方式并将保持向左对齐:
我的问题:是否可以将 JLabel
对齐方式(图标和文本)附加到 JPopupMenu
中的 JMenuItem
的对齐方式?如果是,如何?
最佳答案
JMenuItem
而不是 JLabel
。WindowsLookAndFeel
只能正常工作。import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public final class MenuItemAlignmentTest2 {
public JComponent makeUI() {
JTextArea textArea = new JTextArea();
textArea.setComponentPopupMenu(makeTestPopupMenu(null));
JTree tree = new JTree();
tree.setComponentPopupMenu(makeTestPopupMenu(new ColorIcon(Color.RED)));
JPanel p = new JPanel(new GridLayout(1, 2));
p.add(new JScrollPane(textArea));
p.add(new JScrollPane(tree));
return p;
}
private static JPopupMenu makeTestPopupMenu(Icon icon) {
//UIManager.put("MenuItem.disabledAreNavigable", Boolean.FALSE);
//UIManager.put("MenuItem.disabledForeground", Color.RED);
JMenuItem item0 = new JMenuItem("JMenuItem.setEnabled(false);");
item0.setEnabled(false);
JLabel item1 = new JLabel("JLabel");
JPanel item2 = new JPanel(new BorderLayout());
item2.setOpaque(false); //<----------------------------- add this line
item2.add(new JMenuItem("JPanel with JMenuItem") {
@Override public boolean contains(int x, int y) {
return false; //disable mouse events
}
});
JMenuItem item3 = new JMenuItem(" ");
item3.setBorder(BorderFactory.createEmptyBorder()); //<- add this line
item3.setEnabled(false);
item3.add(new JMenuItem("JMenuItem(disabled) with JMenuItem") {
@Override public boolean contains(int x, int y) {
return false; //disable mouse events
}
});
JPopupMenu popup = new JPopupMenu();
popup.add(makeTestMenuItems("Test0", item0, icon));
popup.add(makeTestMenuItems("Test1", item1, icon));
popup.add(makeTestMenuItems("Test2", item2, icon));
popup.add(makeTestMenuItems("Test3", item3, icon));
return popup;
}
private static JMenu makeTestMenuItems(String title, JComponent item, Icon icon) {
JMenu menu = new JMenu(title);
menu.add(item);
menu.addSeparator();
menu.add(new AbstractAction("JMenuItem") {
@Override public void actionPerformed(ActionEvent e) {
System.out.println("actionPerformed");
}
});
menu.add("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
menu.add(new JMenuItem("bbbbb", icon));
return menu;
}
public static void main(String... args) {
EventQueue.invokeLater(() -> {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JMenuBar mb = new JMenuBar();
mb.add(LookAndFeelUtil.createLookAndFeelMenu());
f.setJMenuBar(mb);
f.getContentPane().add(new MenuItemAlignmentTest2().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
});
}
}
final class LookAndFeelUtil {
private static String lookAndFeel = UIManager.getLookAndFeel().getClass().getName();
public static JMenu createLookAndFeelMenu() {
JMenu menu = new JMenu("LookAndFeel");
ButtonGroup lookAndFeelRadioGroup = new ButtonGroup();
for (UIManager.LookAndFeelInfo lafInfo : UIManager.getInstalledLookAndFeels()) {
menu.add(createLookAndFeelItem(
lafInfo.getName(), lafInfo.getClassName(), lookAndFeelRadioGroup));
}
return menu;
}
private static JRadioButtonMenuItem createLookAndFeelItem(
String lafName, String lafClassName, ButtonGroup lookAndFeelRadioGroup) {
JRadioButtonMenuItem lafItem = new JRadioButtonMenuItem();
lafItem.setSelected(lafClassName.equals(lookAndFeel));
lafItem.setHideActionText(true);
lafItem.setAction(new AbstractAction() {
@Override public void actionPerformed(ActionEvent e) {
ButtonModel m = lookAndFeelRadioGroup.getSelection();
try {
setLookAndFeel(m.getActionCommand());
} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
}
});
lafItem.setText(lafName);
lafItem.setActionCommand(lafClassName);
lookAndFeelRadioGroup.add(lafItem);
return lafItem;
}
private static void setLookAndFeel(String lookAndFeel)
throws ClassNotFoundException, InstantiationException,
IllegalAccessException, UnsupportedLookAndFeelException {
String oldLookAndFeel = LookAndFeelUtil.lookAndFeel;
if (!oldLookAndFeel.equals(lookAndFeel)) {
UIManager.setLookAndFeel(lookAndFeel);
LookAndFeelUtil.lookAndFeel = lookAndFeel;
updateLookAndFeel();
//firePropertyChange("lookAndFeel", oldLookAndFeel, lookAndFeel);
}
}
private static void updateLookAndFeel() {
for (Window window : Frame.getWindows()) {
SwingUtilities.updateComponentTreeUI(window);
}
}
}
class ColorIcon implements Icon {
private final Color color;
protected ColorIcon(Color color) {
this.color = color;
}
@Override public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g2 = (Graphics2D) g.create();
g2.translate(x, y);
g2.setPaint(color);
g2.fillRect(1, 1, getIconWidth() - 2, getIconHeight() - 2);
g2.dispose();
}
@Override public int getIconWidth() {
return 12;
}
@Override public int getIconHeight() {
return 12;
}
}
关于java - JPopupMenu 中带有图标的 JLabel 不遵循其他 JMenuItem 对齐方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38360595/
我想使用 li 和 ul 制作一个多级下拉列表,以便显示我博客中按年和月排序的所有文章。我希望我的下拉菜单看起来像 Google Blogspot 下拉菜单: 这是我的 CSS 和 HTML 代码 u
我在 Win 7 64 机器上将 CodeBlocks 与 gcc 4.7.2 和 gmp 5.0.5 结合使用。开始使用 gmpxx 后,我看到一个奇怪的段错误,它不会出现在 +、- 等运算符中,但
我正在使用 tern 为使用 CodeMirror 运行的窗口提供一些增强的智能感知,它工作正常,但我遇到了一个问题,我想添加一些自定义“types”,可以这么说,这样下拉列表中它们旁边就有图标了。我
我正在尝试让我的 PC 成为 Android 2.3.4 设备的 USB 主机,以便能够在不需要实际“附件”的情况下开发 API。为此,我需要将 PC 设置为 USB 主机和“设备”(在我的例子中是运
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我在设置服务器方面几乎是个新手,但遇到了一个问题。我有一个 Ubuntu 16.04 VPS 并安装了 Apache2 和 Tomcat7。我正在为 SSL 使用 LetsEncrypt 和 Cert
我在一个基于谷歌地图的项目上工作了超过 6 个月。我使用的是 Google Maps API V1 及其开发人员 API key 。当我尝试发布应用程序时,我了解到 Google API V1 已被弃
我是 Python 的新手,所以如果我对一些简单的事情感到困惑,请原谅。 我有一个这样的对象: class myObject(object): def __init__(self):
这个问题已经有答案了: How can I access object properties containing special characters? (2 个回答) 已关闭 9 年前。 我正在尝
我有下面的 CSS。我想要的是一种流体/液体(因为缺乏正确的术语)css。我正在为移动设备开发,当我改变模式时 从纵向 View 到陆地 View ,我希望它流畅。现在的图像 在陆地 View 中效
我正在尝试使用可以接受参数的缓存属性装饰器。 我查看了这个实现:http://www.daniweb.com/software-development/python/code/217241/a-cac
这个问题在这里已经有了答案: Understanding slicing (36 个答案) 关闭 6 年前。 以a = [1,2,3,4,5]为例。根据我的直觉,我认为 a[::-1] 与 a[0:
mysqldump -t -u root -p mytestdb mytable --where=datetime LIKE '2014-09%' 这就是我正在做的事情,它会返回: mysqldum
我正在制作销售税计算器,除了总支付金额部分外,其他一切都正常。在我的程序中,我希望能够输入一个数字并获得该项目的税额我还希望能够获得支付的总金额,包括交易中的税金。到目前为止,我编写的代码完成了所有这
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我是否必须进行任何额外的设置才能让 apache-airflow 在任务失败时向我发送电子邮件。我的配置文件中有以下内容(与默认值保持不变): [email] email_backend = airf
这个问题在这里已经有了答案: What does the $ symbol do in VBA? (5 个回答) 3年前关闭。 使用返回字符串(如 Left)的内置函数有什么区别吗?或使用与 $ 相同
我有一个用VB6编写的应用程序,我需要使用一个用.NET编写的库。有什么方法可以在我的应用程序上使用该库吗? 谢谢 最佳答案 这取决于。您可以控制.NET库吗? 如果是这样,则可以修改您的库,以便可以
当我创建一个以 ^ 开头的类方法时,我尝试调用它,它给了我一个错误。 class C { method ^test () { "Hi" } } dd C.new.test; Too m
我已经使用 bower 安装了 angularjs 和 materialjs。 凉亭安装 Angular Material 并将“ngMaterial”注入(inject)我的应用程序,但出现此错误。
我是一名优秀的程序员,十分优秀!