Ich habe eine JPanel
, die ich auf einen Mausklick reagieren möchte und dann eine JDialog
öffnen. Der JDialog
Konstruktor benötigt eine Instanz von JFrame
und nicht JPanel
- wie kann ich das umgehen?Instantiate JDialog von JPanel
Antwort
Es gibt einen Konstruktor, das Argument nicht brauchen:
JDialog dialog = new JDialog();
Wenn das, was Sie wollen, ist den Dialog modal zu machen, vielleicht können Sie einen statischen Verweis von Ihnen Haupt JFrame, so etwas wie erhalten:
JDialog dialog = new JDialog(MyMainJFrame.getInstance());
Mit dem Parameter free constructor wird der Dialog ohne Besitzer gemacht. Ich denke, dass es am besten wäre, wenn der Frame, der das Panel besitzt, der Eigentümer des Dialogs ist.
Damit meine ich, dass Sie die getParent() von Ihrem JPanel verwenden sollten, um seinen Besitzer zu finden und dann dieses Objekt als Besitzer Ihres JFrame zu senden.
Eine grobe Code für das wäre
java.awt.Container c = myPanel.getParent();
while (!(c instanceof javax.swing.JFrame) && (c!=null)) {
c = c.getParent();
}
if (c!=null) {
JFrame owner=(javax.swing.JFrame) c;
JDialog myDialog=new JDialog(owner);
}
Ich habe diesen Code nicht getestet, aber es ist genug gut für Sie auf die Idee zu verstehen.
Wenn Sie sich für ein JOptionPane entscheiden, können Sie dem JPanel einen MouseListener mit einer mouseAdapter-Innenklasse hinzufügen, um mouseClicked-Ereignisse zu verarbeiten. Sie müssten das Panel-Finale deklarieren, um von der inneren Klasse auf das Panel zugreifen zu können.
final JPanel testPanel = new JPanel();
testPanel.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
JOptionPane.showMessageDialog(testPanel,"Title","InformationMessage",JOptionPane.INFORMATION_MESSAGE);
}});//end of mouseClicked method
Sie sollen wirklich die JDialog zu einem übergeordneten Dialog oder Rahmen, versuchen vor allem zu befestigen, wenn Sie es (indem ein übergeordnetes Fenster, der Dialog wird Ihr Fenster angebracht werden und bringt die Eltern das bringt modal wollen Kind-Dialog). Andernfalls gehen die User Experience wirklich falsch: lost Dialoge, Fenster blockieren, ohne den modalen Dialog zu sehen, etc ...
Um die JPanel Eltern-Fenster zu finden, alles, was Sie brauchen, ist dieser Code:
JPanel panel = new JPanel();
Window parentWindow = SwingUtilities.windowForComponent(panel);
// or pass 'this' if you are inside the panel
Frame parentFrame = null;
if (parentWindow instanceof Frame) {
parentFrame = (Frame)parentWindow;
}
JDialog dialog = new JDialog(parentFrame);
...
Wenn Sie nicht wissen, ob Sie sich in einem Frame oder Dialog befinden, führen Sie den Test "instanceof" für beide Klassen durch.
- 1. Instantiate XMLConfiguration von Frühling
- 2. wie jdialog von jinternframe
- 3. Instantiate Dezimalklasse
- 4. JDialog modales Problem Java GUI
- 5. Hinzufügen Schaltfläche Minimieren/Maximieren zu JDialog oderJPanel
- 6. Instantiate generische Art von Reflexion
- 7. instantiate dynamische Klasse
- 8. BorderLayout - JPanel in JPanel
- 9. Warum werden meine JPanel-Komponenten automatisch ausgefüllt?
- 10. Umgang mit Zustand und Ereignisfolgen von JDialog und JToggleButton
- 11. Instantiate-Klasse vom Klassentyp
- 12. Instantiate und Destroy Unity3D
- 13. Instantiate Fertig in Unity
- 14. Instantiate-Klasse mit NSCODER
- 15. Instantiate Ansicht von Nib wirft Fehler
- 16. JPanel Hinzufügen von Material
- 17. JPanel popuped von Taskleiste
- 18. Center JDialog über Eltern
- 19. JDialog - Aktualisieren dynamisch hinzugefügten Knoten in JTree
- 20. Instantiate Python unittest.TestCase mit Argumenten
- 21. Anzeige von JDialog als Blatt funktioniert nicht
- 22. Schließen von JDialog hinterlässt einen leeren Rahmen
- 23. Zeichnungsanimationen bei der Show von JDialog
- 24. JDialog Abbrechen-Taste
- 25. Obfuscate JFrame Eröffnung JDialog
- 26. Undecorated JDialog Grenze
- 27. JFreeChart ist in modalem JDialog nicht sichtbar?
- 28. Android - Instantiate ein Fragment mehrmals?
- 29. Instantiate Benutzerkontrolle mit benutzerdefinierten Attributen
- 30. Instantiate StreamExecutionEnvironment in Scala Shell
Haben Sie überlegt, eine JOptionPane zu verwenden? – ChadNC