4

我有一些图标和复选框的问题JPopupMenu。复选框和图标未对齐

项目的创建方式如下:

JMenuItem deleteAttributeMenuItem = new JMenuItem(locale.getString("TREE_AttrDelete"), iconDelete);

JMenuItem primaryKeyAttributeMenuItem = new JCheckBoxMenuItem(locale.getString("TREE_AttrChkBoxPK"));

请看一下图片:

在此处输入图像描述

有小费吗?

4

2 回答 2

3

现在我找不到正确的方法来重新布局 JCheckBoxMenuItem,

但是您是否同意 Swing 使用(默认)Metal Look and Feel 的这个标准输出???,只是为了避免使用其他 Look and Feel(s) 来避免任何误解,因为 Swing 的 Standard Look 之间的 API 存在一些差异和感觉太

在此处输入图像描述

从教程代码(修改和删除镇流器和噪音)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MenuLookDemo {

    private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
    private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon");
    private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon");
    private JTextArea output;
    private JScrollPane scrollPane;
    private JMenuBar menuBar;
    private JMenu menu;
    private JMenuItem menuItem;
    private JRadioButtonMenuItem rbMenuItem;
    private JCheckBoxMenuItem cbMenuItem;

    public JMenuBar createMenuBar() {
        menuBar = new JMenuBar();
        menu = new JMenu("A Menu");
        menu.getAccessibleContext().setAccessibleDescription("The only menu in this program that has menu items");
        menuBar.add(menu);
        menuItem = new JMenuItem("A text-only menu item", KeyEvent.VK_T);
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));
        menuItem.getAccessibleContext().setAccessibleDescription("This doesn't really do anything");
        menu.add(menuItem);
        menuItem = new JMenuItem("Both text and icon", errorIcon);
        menu.add(menuItem);
        menu.addSeparator();
        ButtonGroup group = new ButtonGroup();
        rbMenuItem = new JRadioButtonMenuItem("A radio button menu item");
        rbMenuItem.setSelected(true);
        group.add(rbMenuItem);
        menu.add(rbMenuItem);
        rbMenuItem = new JRadioButtonMenuItem("Another one", infoIcon);
        group.add(rbMenuItem);
        menu.add(rbMenuItem);
        menu.addSeparator();
        cbMenuItem = new JCheckBoxMenuItem("A check box menu item", warnIcon);
        menu.add(cbMenuItem);
        cbMenuItem = new JCheckBoxMenuItem("Another one");
        menu.add(cbMenuItem);
        menu.addSeparator();
        return menuBar;
    }

    public Container createContentPane() {
        JPanel contentPane = new JPanel(new BorderLayout());
        contentPane.setOpaque(true);
        output = new JTextArea(5, 30);
        output.setEditable(false);
        scrollPane = new JScrollPane(output);
        contentPane.add(scrollPane, BorderLayout.CENTER);
        return contentPane;
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("MenuLookDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        MenuLookDemo demo = new MenuLookDemo();
        frame.setJMenuBar(demo.createMenuBar());
        frame.setContentPane(demo.createContentPane());
        frame.setSize(450, 260);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                createAndShowGUI();
            }
        });
    }
}

这些方法以像素为单位讨论位置

在此处输入图像描述

于 2012-05-06T12:54:19.693 回答
3

看看这个,为了达到你想要的,我做了这个,

JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem("Check Me", null, true);
cbmi.setMargin(new java.awt.Insets(5, 25, 5, 5));
cbmi.setIconTextGap(15);
cbmi.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
helpMenu.add(cbmi);

这是所说的东西的输出:

在此处输入图像描述

于 2012-05-06T16:21:38.683 回答