سؤال

أريد إنشاء شريط أدوات في طلبي. إذا قمت بالنقر فوق زر "شريط الأدوات"، فسوف ينبثق قائمة، تماما كما هو الحال في شريط أدوات Eclipse. أنا لا أعرف كيفية القيام بذلك في الأرجوحة. هل يمكن لشخص مساعدتي من فضلك؟ لقد جربت جوجل ولكن لم أجد شيئا.

هل كانت مفيدة؟

المحلول

هذه هي الطريقة الأكثر صعوبة في التأرجح مما يجب أن يكون. لذلك بدلا من توجيهك إلى برامج تعليمية قمت بإنشاء مثال يعمل بالكامل.

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class ToolbarDemo {

    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setPreferredSize(new Dimension(600, 400));
        final JToolBar toolBar = new JToolBar();

        //Create the popup menu.
        final JPopupMenu popup = new JPopupMenu();
        popup.add(new JMenuItem(new AbstractAction("Option 1") {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(frame, "Option 1 selected");
            }
        }));
        popup.add(new JMenuItem(new AbstractAction("Option 2") {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(frame, "Option 2 selected");
            }
        }));

        final JButton button = new JButton("Options");
        button.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                popup.show(e.getComponent(), e.getX(), e.getY());
            }
        });
        toolBar.add(button);

        frame.getContentPane().add(toolBar, BorderLayout.NORTH);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

نصائح أخرى

لا أرى السبب في أن هذا أصعب مما يجب أن يكون أو لماذا يجب عليك استخدام mouselistener. يحل الحل بواسطة Steve Mcleod Works، ولكن حيث تظهر القائمة تعتمد على المكان الذي تم فيه النقر فوق الماوس. لماذا لا تستخدم فقط ActionListener كما يستخدم عادة ل JButton. يبدو أصعب ولا أقل صعوبة.

final JPopupMenu menu = new JPopupMenu();
menu.add(...whatever...);

final JButton button = new JButton();
button.setText("My Menu");
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ev) {
        menu.show(button, button.getBounds().x, button.getBounds().y
           + button.getBounds().height);
    }
});

هذا ينفذ القائمة حول نفس القائمة في jmenubar بالنسبة لي، والوضع ثابت. يمكنك وضعه بشكل مختلف عن طريق تعديل X و Y في القائمة. قميص ().

أعتقد أنه هو نفسه في AWT.

يجب عليك وضع ActionCommand على هذا الزر وعندما يتم تنفيذها إظهار القائمة المنبثقة وفقا لإحداثيات الماوس.

انظر القسم إحضار قائمة منبثقة, ، في كيفية استخدام القوائم.

لست متأكدا من أنني أفهمك بشكل صحيح ولكن إذا كنت ترغب في معرفة كيفية جعل أشرطة الأدوات في تأرجح تحقق من هذا

دروس Java: كيفية استخدام قضبان الأدوات وهذه

دروس Java: كيفية استخدام الإجراءات

هنا فئة بسيطة ولطيفة

enter image description here

import javax.swing.JPopupMenu;
import javax.swing.JToggleButton;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class MenuButton extends JToggleButton {

    JPopupMenu popup;

    public MenuButton(String name, JPopupMenu menu) {
        super(name);
        this.popup = menu;
        addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ev) {
                JToggleButton b = MenuButton.this;
                if (b.isSelected()) {
                    popup.show(b, 0, b.getBounds().height);
                } else {
                    popup.setVisible(false);
                }
            }
        });
        popup.addPopupMenuListener(new PopupMenuListener() {
            @Override
            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {}
            @Override
            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
                MenuButton.this.setSelected(false);
            }
            @Override
            public void popupMenuCanceled(PopupMenuEvent e) {}
        });
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top