メニューでのJButtonを作成する方法?
-
18-09-2019 - |
質問
私は自分のアプリケーションでツールバーを作成したいです。あなたがそのツールバーのボタンをクリックすると、それだけでEclipseのツールバーにあるように、メニューがポップアップ表示されます。私は、Swingでこれを行う方法を知りません。誰かが私を助けてくださいことはできますか?私はGoogleのを試みたが、何も見つからなかったしました。
解決
これは、必要以上のスイングで道に困難です。だからではなく、私は完全に動作する例を作成しました。チュートリアルへあなたを指しているの
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);
}
}
他のヒント
私は表示されません。スティーブ・マクラウドによって溶液は動作しますが、メニューが表示される場所にマウスがクリックされた場所によって異なります。なぜ同じように、通常の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と同じだと思います。
あなたは、そのボタンにアクションコマンドを置く必要があり、それが実行されますときにマウスの座標に応じてポップアップメニューを表示します。
<のhref = "http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html" のrelで、ポップアップメニューを育てる<全角>を参照してください= "nofollowをnoreferrer">メニューを使用する方法。
私は私が正しくあなたを理解していないが、あなたはスイングチェックでツールバーを作成する方法を知りたい場合は、この
ここでは、シンプルで素敵なクラスである
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) {}
});
}
}