我想在我的應用程序中創建一個工具欄。如果您單擊該工具欄上的按鈕,它將彈出一個菜單,就像在Eclipse的工具欄中一樣。我不知道如何在Swing中做到這一點。有人能幫助我嗎?我試過Google,但什麼都沒發現。如何用菜單創建JButton?
回答
這在Swing中比在需要時更困難。因此,我沒有將你指向教程,而是創建了一個完整的工作示例。
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);
}
}
我認爲這與AWT中的相同。
你應該在該按鈕上放一個ActionCommand,當它執行時根據鼠標座標顯示彈出菜單。
我不知道我理解正確,但如果你想知道如何在旋啓式止回閥工具欄這個
請參閱部分造就了彈出菜單,How to Use Menus。
只是,這是更具體的鏈接:http://docs.oracle.com/javase/tutorial/uiswing/components/menu .html#popup – pratikabu 2013-06-07 15:15:53
我不明白爲什麼這比它需要更困難或爲什麼你應該使用MouseListener。史蒂夫麥克勞德的解決方案的工作,但菜單出現取決於鼠標點擊的地方。爲什麼不像通常用於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來以不同的方式放置它。
方法的問題是隻有在用戶釋放鼠標按鈕時纔會出現彈出式菜單。菜單應該出現在鼠標下方,而不是鼠標移動 – 2012-12-19 12:56:05
你說得對。我沒有注意到。我仍然喜歡比其他方式更好,但都不完全令人滿意。我最終沒有實現我想要這樣做,所以也沒有使用它。我想你可以做你做的,並使用我的menu.show版本的按鈕座標,以避免位置不一致。 – 2012-12-20 19:11:08
這是一個更好的答案,應該得到更多的選票。看起來比點擊鼠標位置好。 – rsman 2013-08-17 08:26:16
下面是一個簡單而漂亮的類
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) {}
});
}
}
- 1. 如何創建JButton數組
- 2. 如何用圖標創建菜單?
- 3. 如何用DOM和Javascript創建菜單?
- 4. 如何用php創建下拉菜單?
- 5. 如何創建菜單調用?
- 6. 如何用php創建下拉菜單
- 7. 如何創建簡單菜單?
- 8. 如何用數據庫下拉菜單創建導航菜單?
- 9. 使用jfeinstein10的滑動菜單,如何創建滑動菜單
- 10. 如何使用菜單欄在grails中創建菜單
- 11. 如何用下拉菜單創建這個水平菜單?
- 12. 如何使用子菜單創建水平菜單欄MVC4
- 13. 如何使用JSF創建菜單欄和子菜單
- 14. 如何使用MVC創建菜單/子菜單?
- 15. 如何用Java中的子菜單創建彈出式菜單
- 16. 如何使用子菜單創建浮動菜單
- 17. 如何使用子菜單創建下拉菜單?
- 18. 用兩個子菜單創建菜單
- 19. 用顏色創建JButton
- 20. 用css創建子菜單
- 21. 使用MvcSiteMapProvider創建菜單
- 22. 使用PHP創建菜單?
- 23. 如何在java中創建一個jbutton
- 24. 如何爲pygame創建tkinter菜單欄
- 25. 如何創建此邊欄菜單?
- 26. 如何創建彈出菜單
- 27. 如何創建一個FloatingActionButton菜單
- 28. 如何創建覆蓋div的菜單?
- 29. 如何創建Alloy UI下拉菜單
- 30. 如何在linux mint中創建菜單
我一直在做這樣的事情,但沒有JToolBar。您的解決方案是否存在這樣的行爲:如果您再次點擊該按鈕並重新打開菜單,它會再次彈出菜單,而不是忽略它? – 2009-11-07 15:08:17
我也做了一些稍微不同的事情:popup.show(c,0,c.getHeight()); – 2009-11-07 15:09:33
謝謝。這是我找到的最容易理解的解決方案,所以我會使用它,雖然它不完全是一個下拉JButton。其他解決方案太複雜,我不明白。我在下面列出了其中的一些。
Dikei
2009-11-07 16:15:26