Chcę utworzyć pasek narzędzi w mojej aplikacji. Kliknięcie przycisku na pasku narzędzi spowoduje wyświetlenie menu, podobnie jak na pasku narzędzi Eclipse. Nie wiem, jak to zrobić w Swing. Czy ktoś może mi pomóc? Wypróbowałem Google, ale nic nie znalazłem.Jak utworzyć JButton z menu?
Odpowiedz
To jest o wiele trudniejsze niż w Swing. Zamiast więc skierować cię do samouczków, stworzyłem w pełni działający przykład.
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);
}
}
Myślę, że jest taki sam jak w AWT.
Powinieneś umieścić polecenie akcji na tym przycisku, a po jego uruchomieniu wyświetlać menu wyskakujące zgodnie ze współrzędnymi myszy.
Nie jestem pewien, czy rozumiem zostanie poprawnie, ale jeśli chcesz wiedzieć, jak zrobić paski narzędzi w czeku Swing to
Patrz sekcja wychowywanie Menu podręczne, w How to Use Menus.
tylko, że jest to bardziej specyficzne Link: http://docs.oracle.com/javase/tutorial/uiswing/components/menu .html # popup – pratikabu
nie widzę dlaczego to jest trudniejsze niż to musi być i dlaczego należy użyć MouseListener. Rozwiązanie Steve'a McLeoda działa, ale miejsce, w którym pojawia się menu, zależy od tego, gdzie kliknięto myszą. Dlaczego nie po prostu użyć ActionListener, jak zwykle używane do JButton. Wydaje się nie trudniejsze ani mniej trudne.
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);
}
});
To pozycjonuje dla mnie menu podobne do menu w JMenuBar, a pozycja jest zgodna. Możesz ustawić to inaczej, modyfikując xiy w menu.show().
Problem z podejściem polega na tym, że menu podręczne pojawia się tylko wtedy, gdy użytkownik zwolni przycisk myszy. Menu powinno pojawić się po kliknięciu myszką, a nie pod myszką –
Masz rację. Nie zauważyłem. Wciąż lubię to lepiej niż w drugą stronę, ale żadna z nich nie jest w pełni satysfakcjonująca. W końcu nie wdrożyłem tego, co próbowałem zrobić w ten sposób, więc i tak go nie używałem. Sądzę, że możesz zrobić to, co zrobiłeś i użyć mojej wersji menu.pokaż współrzędne przycisku, aby uniknąć niespójności pozycji. –
To jest o wiele lepsza odpowiedź i powinna uzyskać więcej głosów. Wygląda lepiej niż lokalizacja myszy. – rsman
Oto prosty i przyjemny klasa
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. Jak utworzyć częściowo przezroczysty JButton na całkowicie przezroczystej ramce JFrame?
- 2. Jak właściwie wybrać JButton
- 3. Jak dodać JPanel, klikając JButton?
- 4. Przezroczysty JButton
- 5. Jak utworzyć menu w menu Start dla mojego programu?
- 6. Jak utworzyć rozwijane menu w aplikacji Evernote?
- 7. Jak utworzyć pole wyboru wewnątrz rozwijanego menu?
- 8. Jak utworzyć skrót do elementu menu (JMenuItem)?
- 9. Jak programowo utworzyć menu w systemie Android?
- 10. Jak utworzyć pełnoekranową mapę Google z nakładką menu witryny?
- 11. Jak utworzyć pionowy pasek nawigacyjny z rozwijanymi menu?
- 12. JButton skopiowany podczas odświeżania?
- 13. Howto make JButton z prostym, płaskim stylem?
- 14. Nie można utworzyć menu "Udostępnij" w wyskakującym menu na Androidzie
- 15. Jak uzyskać domyślny kolor tła JButton?
- 16. Java - Metoda połączenia przez JButton
- 17. Jak automatycznie zwiększać lub zmniejszać rozmiar tekstu JButton na podstawie rozmiaru JButton?
- 18. Jak utworzyć wyskakujące menu za pomocą paska przewijania?
- 19. Windows Phone utworzyć menu bocznego paska jak Facebook
- 20. Making klikalny JButton wewnątrz JTable
- 21. Jak utworzyć zagnieżdżone, zwijane menu za pomocą Angular Material2?
- 22. Java, identyfikator zestawu dla JButton
- 23. Dostosowywanie menu kontekstowego, takiego jak menu kontekstowe
- 24. Jak utworzyć menu rozwijane w szufladzie nawigacji (w systemie Android)?
- 25. Jak utworzyć elastyczne menu hamburgerów w AMP HTML
- 26. Jak utworzyć menu nawigacyjne dla różnych stron w SDL Tridion?
- 27. Jak utworzyć grupę elementów menu radiowego w WPF?
- 28. Tweetuj jak menu z przesunięciem
- 29. Jak korzystać z listy css bootstrap z przylepcami, aby utworzyć lepkie menu w kolumnie?
- 30. Nakładanie JButton na JLabel w Java Swing?
Robiłem coś takiego, ale bez JToolBar. Czy Twoje rozwiązanie zachowuje się tak, że po ponownym kliknięciu przycisku z menu w górę pojawia się ponownie menu zamiast go odrzucić? –
Zrobiłem też coś nieco inaczej: popup.show (c, 0, c.getHeight()); –
Dziękuję. Jest to najłatwiejsze do zrozumienia rozwiązanie, które znalazłem, więc użyję go, chociaż nie jest to właściwie dropbox JButton. Inne rozwiązania są zbyt skomplikowane, aby je zrozumieć. Poniżej wymienię niektóre z nich.
Dikei