3

次のようにツールバーにメニューを追加します。

    JMenuBar menu = new JMenuBar();
    JMenu actions = new JMenu("Aktionen");
    Icon menuIcon = ImageUtilities.loadImageIcon("pathToIcon", true);
    actions.setIcon(menuIcon);

    // Add
    JMenuItem addItem = new JMenuItem("Add");       
    Icon addIcon = ImageUtilities.loadImageIcon("pathToIcon", true);
    addItem.setIcon(addIcon);
    addItem.setToolTipText("Add new Item");
    addItem.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            AddItemAction someAction = new AddItemAction();
            someAction.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null) {
                // Foo
            });
        }
    });        

    menu.add(actions);
    actions.add(addItem);
    toolbar.addSeparator();
    toolbar.add(menu);  

基本的には、問題なく動作します。ただし、ツールチップ (「新しいアイテムの追加」) は表示されません。ヒントはありますか?

編集:同じ問題を抱えている人がこれに出くわした場合に備えて:最初から疑うべきだったように、それはL&Fでした. JMenuItems のツールチップを表示するためのプロパティがあります。デフォルトは false です。

4

1 に答える 1

6

以下のsscceは正しく機能します。それでも問題が解決しない場合は、質問を編集して、説明した問題を示す例を含めてください。

補遺: を に追加しましたmenuJToolBar、ドッキングまたはフリー フローティングのどちらでも動作します。

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JToolBar;

/** @see http://stackoverflow.com/a/14630345/230513 */
public class Test {

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JMenuBar menu = new JMenuBar();
        JMenu actions = new JMenu("Aktionen");
        JMenuItem addItem = new JMenuItem("Add");
        addItem.setToolTipText("Add new Item");
        menu.add(actions);
        actions.add(addItem);
        JToolBar toolbar = new JToolBar("Tools");
        toolbar.add(menu);
        f.add(toolbar);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Test().display();
            }
        });
    }
}
于 2013-01-31T16:20:15.837 に答える