2012-05-05 2 views
3

У меня проблема с некоторыми значками и флажками в JPopupMenu. Чек-боксы и иконки не выровненыЗначок выравнивания и JCheckbox в JPopupmenu

Элементы, которые созданы как:

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

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

Пожалуйста, обратите внимание на картину:

enter image description here

Любые советы?

+1

Если вы попытались использовать [setIconTextGap (...)] (http://docs.oracle.com/javase/7/docs/api/javax/swing/AbstractButton.html#setIconTextGap (int)), а также [setHorizontalTextPosition (...)] (http://docs.oracle.com/javase/7/docs/api/javax/swing/AbstractButton.html#setHorizontalTextPosition (int)) и [setVerticalTextPosition (...)] (http: //docs.oracle.com/javase/7/docs/api/javax/swing/AbstractButton.html#setVerticalTextPosition(int)), а последний - [setHorizontalAlignment (...)] (http://docs.oracle .com/javase/7/docs/api/javax/swing/AbstractButton.html # setHorizontalAlignment (int))? –

+0

Спасибо за ваш ответ! Но это не сработало. –

+0

Ваше приветствие и удержание улыбки, тогда, пожалуйста, проверьте свои изображения, используемые вами, возможно, у них есть что-то с левой стороны, которое занимает это место, удалите это с помощью любого программного обеспечения, такого как Paint, NeroSnapViewer, Gimp и т. Д. :-) –

ответ

2

Посмотрите на это, для того, чтобы достичь того, чего вы хотите, я это сделал,

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); 

И вот ВЫВОД ИЗГОТОВЛЕНИЯ:

enter image description here

2

прямо сейчас я не могу нашел правильный способ, как re_layout JCheckBoxMenuItem,

, но согласны ли вы с этим, стандартный вывод Качели с помощью (по умолчанию) Metal Look и Feel ???, просто чтобы избежать любой missunderstand с помощью другого Look и Feel (s), потому что есть некоторые отличия в стандарте API Betweens Свинга Look и чувствует себя слишком

enter image description here

из учебники коды (измененные и удалены balasts и шумы)

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(); 
      } 
     }); 
    } 
} 

эти методы говорят о possitions в пикселях

enter image description here

+0

@aterai вы можете [пожалуйста, уточните] (http://java-swing-tips.blogspot.com /2009/10/jcheckboxmenuitem-icon.html) – mKorbel

+0

Спасибо за сообщение! Я просто добавил значки к флажкам (как и вы). Теперь он выглядит лучше, но он не идеален! Это хороший способ обхода. может найти хорошее решение позже, но на данный момент я доволен этим. –

+0

@ Andreas Freitag use 1) JMenuItem.setIconTextGap (0); и 2) посмотрите, полезно ли [Выравнивание всплывающего меню] (http://tips4java.wordpress.com/2008/12/03/popup-menu-alignment/), 3) мы оба ожидаем его величества (@aterai), он известен как великий гул Свинг – mKorbel