Sub-Dialog von modalem JDialog aus aufrufen - geht das?

  • Themenstarter Themenstarter HobbyProgger
  • Beginndatum Beginndatum
H

HobbyProgger

Gast
Hallo, ich habe einen modelen JDialog für die Eingabe von Parametern. Jetzt möchte ich diese Eingabe noch durch einen "Picker" (erweitert JDialog oder alternativ JFrame) vereinfachen. Nur wie stelle ich das an, ohne zuvor erst den JDialog ausblenden zu müssen?
Am liebsten wäre es mir aber, wenn dieser Picker auch modal wäre (parent=JDialog).
 
API: Konstruktor JDialog(Dialog owner, String title, boolean modal)

-bei modal übergibst du true für einen modalen Dialog
-bei owner übergibst du den anderen JDialog (JDialog extends Dialog), den "für die Eingabe von Parametern"

-> du hast einen neuen modalen Dialog der aus einem anderen Dialog konstruiert wurde.
 
Ok, im Test hat es bei mir nun auch funktioniert:

Klasse 1:
Java:
package ModalDialog;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


public class DialogTest {
	public static void main(String[] args) {
		final JFrame externalFrame = new JFrame( "TEST" );
		externalFrame.setSize( 600, 600 );
		
		JButton but = new JButton();
		but.addActionListener( new ActionListener()  {

			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Button_Click");
				new MyDialog(externalFrame, true);
				System.out.println("Dialog closed!");
			}
			
		});

		externalFrame.getContentPane().add( but, BorderLayout.CENTER );
		externalFrame.setVisible(true);
		externalFrame.setResizable(true);
		
	}
}

Klasse 2:
Java:
package ModalDialog;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;

@SuppressWarnings("serial")
public class MyDialog extends JDialog {
	static MyDialog thisObj = null;
	
	public MyDialog(Frame parent, boolean modal) {
		super(parent, modal);
		thisObj = this;
		initMe();
	}
	
	public MyDialog(JDialog parent, boolean modal) {
		super(parent, modal);
		thisObj = this;
		initMe();
	}
	
	public void initMe() {
		JButton but = new JButton();
		but.addActionListener( new ActionListener()  {

			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("Button_Click");
				new MyDialog(thisObj, true);
				System.out.println("Dialog closed!");
			}
			
		});

		this.setLayout( new BorderLayout() );
		this.add(but, BorderLayout.CENTER);
		this.setSize( new Dimension(200,300) );
		this.setVisible(true);
	}
}

... muss da mal schauen, wo da in meinem Projekt der Fehler liegt...


Aber noch eine weitere Frage:
Ist es auch möglich, einen owner für einen JDialog zu definieren, ohne dass dieser modal ist?
Der Dialog so ständig vor dem Hauptfenster zu sehen sein (aber nicht topmost/always on top!), wobei sich dieses aber noch bedienen lässt.
 
Vielleicht habt ihr diese Frage übersehen:
Ist es auch möglich, einen owner für einen JDialog zu definieren, ohne dass dieser modal ist?
Der Dialog soll ständig vor dem Hauptfenster zu sehen sein (aber nicht topmost bzw. always on top!), wobei sich dieses Hauptfenster aber noch bedienen lässt (also der Dialog nicht modal ist).
 
Ist es auch möglich, einen owner für einen JDialog zu definieren, ohne dass dieser modal ist?

Mit
Java:
new MyDialog(externalFrame, false);
bzw.
Java:
new MyDialog(thisObj, false);
? Ich versteh deine Frage nicht so ganz.

-> "einen owner für einen JDialog zu definieren" kannst du immer.
-> "Der Dialog soll ständig vor dem Hauptfenster zu sehen sein" ist Widerspruch zu "wobei sich dieses Hauptfenster aber noh bedienen lässt"
 
Ich versteh deine Frage nicht so ganz.
Ja, kann ich mir vorstellen... 🙂

Ich habe ein bereits bestehendes Projekt übernommen und dort wurde ein Dialog mit
Java:
super(new JFrame(), modal)
modal geöffnet (also modal==true)... ziemlich doof, aber es klappte. - Als ich dann aber false an den Konstrukter übergab (modal==false), ist der Dialog logischerweise stets hinter dem Hauptfenster verschwunden, wenn dieses angeklickt wurde.

Da ich diesen Fehler nun gefunden habe, hat sich mein Problem auch erledigt.

-> "einen owner für einen JDialog zu definieren" kannst du immer.
Er sollte nur nicht so definiert werden, wie da oben... 😉

-> "Der Dialog soll ständig vor dem Hauptfenster zu sehen sein" ist Widerspruch zu "wobei sich dieses Hauptfenster aber noh bedienen lässt"
Nein, ist es nicht: man kann ja den Dialog zur Seite verschieben. 😉
Was ich meinte war: der Dialog sollte immer eine Ebene höher liegen, als das Hauptfenster selber - und nicht dahinter verschwinden.
 
der Dialog sollte immer eine Ebene höher liegen, als das Hauptfenster selber - und nicht dahinter verschwinden.

Du fängst einfach mit einem WindowFocusListener (addWindowFocusListener) ab, wenn das Fenster den Fokus verliert und rufst dann toFront() auf. Ist zumindest auch eine Möglichkeit...
 

Zurück
Oben