Aprire una finestra pop-up-da JMenuItem java
Domanda
Ho un JMenu
con un JMenuItem
, e quando clicco su questo, ho bisogno di aprire una JFrame
o una finestra, in altre parole, un componente con JButton
all'interno, JTextField
, ...
Come posso fare questo?
Soluzione
È possibile creare il JFrame
nello stesso modo è stato creato il JFrame
iniziale, e la chiamata ??p>
setVisible(true);
nel ActionListener
del vostro JMenuItem
per renderlo visibile quando viene cliccato il menu.
Se si vuole che sia modale (frame originale non è accessibile a meno che la nuova finestra è chiusa), è possibile utilizzare un JDialog
invece, l'impostazione modal
su true nella funzione di costruzione, o chiamando setModal(true)
.
Altri suggerimenti
Scrivo in risposta per buona vista codice:
Se io uso un JFrame ho ottenuto questo errore: . "Java.lang.IllegalArgumentException: l'aggiunta di una finestra su un contenitore"
Questo è il mio codice nel metodo actionPerformed:
PopupFactory factory = PopupFactory.getSharedInstance();
JFrame frame = new JFrame();
frame.setLayout(null);
frame.setBounds(428, 99, 185, 155);
final JButton button = new JButton();
button.setText("Button");
button.setBounds(10, 93, 111, 25);
frame.getContentPane().add(button);
final Popup popup = factory.getPopup(null, frame, 200, 200);
popup.show();
Stai confondendo "pop-up" e "finestre".
Un pop-up è generalmente visualizzato quando si fa clic destro su qualche oggetto. Il popup visualizzerà un elenco di azioni che possono essere eseguite su tale oggetto. Ad esempio, un campo di testo potrebbe avere "taglio", "copia" e "incolla". Leggere la sezione dal tutorial Swing on " allevare un Menu a comparsa " per ulteriori informazioni.
Una finestra viene utilizzata per visualizzare altre componenti Swing in un JFrame o JDialog.
Dato che si sta invocando questa azione da una voce di menu Penso che probabilmente si vuole creare e visualizzare un JDialog modale, non un JFrame o pop-up.
Inoltre, durante la lettura del tutorial, leggere la sezione "Utilizzo di gestori di layout". Utilizzando i layout nulli non è il modo migliore per creare un dialogo.