문제

응용 프로그램에서 도구 모음을 만들고 싶습니다. 해당 도구 모음의 버튼을 클릭하면 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의 솔루션은 작동하지만 메뉴가 나타나는 곳에 마우스가 클릭 한 위치에 따라 다릅니다. JBUTTON에 일반적으로 사용되는 ActionListener를 사용해보십시오. 어렵거나 덜 어렵지 않은 것 같습니다.

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의 메뉴와 거의 동일하게 위치하며 위치는 일관됩니다. menu.show ()에서 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