Swing JDialog liefert immer false, 2 JListen verknüpfen

raffi

Mitglied
Hallo, bin gerade dabei ein Programm zu schreiben, bei dem über Dialoge hinzugefügt bzw geändert werden kann.
Für die Dialoge habe ich mir eine BaseDialog-Klasse als Grundgerüst geschrieben, jene liefert mir aber immer nur true respektive false zurück, je nachdem wie ich die boolean Variable im Konsruktor des BaseDialog vereinbart habe.
Java:
public class BaseDialog extends JDialog {

	JFrame frame;
	JPanel buttonContainer;
	JPanel mainContainer;
	JButton okButton;
	JButton cancelButton;
	GridBagHelper gbh;
	AbstractAction closeAction;
	boolean ok;
	
	public BaseDialog (Window owner, String title) {
		super(owner, title);
		frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		frame.setDefaultLookAndFeelDecorated(true);
		frame.setLayout(new BorderLayout());
		
		ok = false;
		okButton = new JButton("OK");
		okButton.addActionListener(new CloseAction(true));
		cancelButton = new JButton("Cancel");
		cancelButton.addActionListener(new CloseAction(false));
		gbh = new GridBagHelper();
		gbh.setInsets(new Insets(3,3,3,3));
		buttonContainer = new JPanel();
		buttonContainer.setLayout(new GridBagLayout());
		mainContainer = new  JPanel();
		
		gbh.add(buttonContainer, okButton, 0, 0);
		gbh.add(buttonContainer, cancelButton, 0, 1);
		frame.add(buttonContainer, BorderLayout.SOUTH);
		frame.add(mainContainer, BorderLayout.NORTH);
		frame.pack();
		frame.setVisible(true);
	}
	
	class CloseAction extends AbstractAction {

		private boolean actionState;
		
		public CloseAction (boolean state) {
			this.actionState = state;
		}
		
		@Override
		public void actionPerformed(ActionEvent arg0) {
			ok = actionState;
			frame.setVisible(false);
		}
	}
	
	public JPanel getMainContainer () {
		return mainContainer;
	}
	
	public boolean exec () {
		frame.pack();
		frame.setVisible(true);
		return ok;
	}
}
Aufgerufen wird der BaseDialog dann in der Main-Klasse wie gehabt und die Methode exec ausgewertet.

Bei false ist das ersteinmal nicht so schlimm, da eben einfach nix passiert. Wenn ich jedoch ok testweise auf treu setze bringt er mir einen Fehler da ich in der Main-Klasse Felder auslese, diese aber beim Starten des Dialog logischerweise noch nicht gefüllt sind.

Das zweite Problem besteh darin, das es in meinem Programm um Pofessuren und Lehrveranstaltungen geht. Nun möchte ich die Professuren Liste mit der Veranstaltungsliste so verknüpfen, das bei Auswahl einer Profesur nur die zugehörigen Veranstaltungen in der Liste angezeigt werden. Ich hatte mir das so gedacht, das ich in der ProfModel-Klasse ein Veranstaltungsmodel erstelle und darüber dann agiere. Kann das so funktionieren wenn in der Main-Klasse jeweils eine JList für Professuren und Veranstaltungen vorhanden ist?

MfG
 
Zuletzt bearbeitet:

Verjigorm

Top Contributor
Also erstens:
Der Code ist absolut grausam :autsch: Du hast eine Klasse die von JDialog erbt und baust darin einen JFrame :rtfm: Ich geh mal nicht weiter auf weitere 3-4 Grausamkeinten ein ;)

und zweitens:
Wann genau rufst du exec() auf?

Generelle Lösung:
Mach einen RICHTIGEN JDialog und mach ihn modal, dann muss dein Hauptprogramm nach dem Öffnen des Dialogs warten, bis dieser geschlossen wurde.

edit:
hab dir mal was zusammenkopiert:

Java:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;

public class MyDialog extends JDialog 
{
	private boolean ok;
	private JButton cancelButton;
	private JButton okButton;
	
	public MyDialog()
	{
		cancelButton = new JButton("Cancel");
		cancelButton.addActionListener(new ActionListener() 
		{
			
			@Override
			public void actionPerformed(ActionEvent arg0) 
			{
				ok = false;
				dispose();
			}
		});
		
		okButton = new JButton("OK");
		okButton.addActionListener(new ActionListener() 
		{
			
			@Override
			public void actionPerformed(ActionEvent arg0) 
			{
				ok = true;
				dispose();
			}
		});
		
		setTitle("Modaler Dialog");
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		setLocationRelativeTo(null);
		setLayout(new GridLayout());
		
		add(okButton);
		add(cancelButton);
		
		pack();
		setModal(true);
	}
	
	public boolean isOk()
	{
		return ok;
	}
}

Java:
public class ModalDialogTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		MyDialog dia = new MyDialog();
		dia.setVisible(true); //Hier wird gewartet bis der Dialog "fertig" ist
		
		if(dia.isOk())
		{
			System.out.println("OK gedrückt");
                        //Hier könnte ich jetzt Werte vom Dialog abfragen und auswerten
		}	
		else
		{
			System.out.println("Cancel gedrückt");
		}
	}

}
 
Zuletzt bearbeitet:

raffi

Mitglied
Hallo und danke, das mit dem Frame war natürlich quatsch.
Ich habe das Problem aber nun gelöst, sieht zwar bestimmt immernoch bisschen schlimm aus aber gut.
Java:
public class BaseDialog extends JDialog {

	JPanel buttonContainer;
	JPanel mainContainer;
	GridBagHelper gbh;
	boolean ok;
	
	public BaseDialog (Window owner, String title) {
		super(owner, title);
		
		ok = false;
		setModal(true);
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		gbh = new GridBagHelper();
		buttonContainer = new JPanel();
		buttonContainer.setLayout(new GridBagLayout());
		mainContainer = new  JPanel();
		mainContainer.setLayout(new GridBagLayout());
		gbh.setInsets(new Insets(3,3,3,3));
		JButton okButton = new JButton("OK");
		okButton.addActionListener(new CloseAction(true));
		JButton cancelButton = new JButton("Abbrechen");
		cancelButton.addActionListener(new CloseAction(false));
		
		gbh.add(buttonContainer, okButton, 0, 0);
		gbh.add(buttonContainer, cancelButton, 0, 1);
		add(buttonContainer, BorderLayout.SOUTH);
		add(mainContainer, BorderLayout.CENTER);
	}
	
	class CloseAction extends AbstractAction {

		private boolean actionState;
		
		public CloseAction (boolean state) {
			this.actionState = state;
		}
		
		@Override
		public void actionPerformed(ActionEvent arg0) {
			ok = actionState;
			setVisible(false);
		}
	}
	
	public JPanel getMainContainer () {
		return mainContainer;
	}
	
	public boolean exec () {
		pack();
		setVisible(true);
		return ok;
	}
}
Jetzt steht nur noch das zweite Problem im Raum. Und zwar wie ich die JListen verknüpfe das beim Selektieren einer Professur genau die zugehörigen Veranstaltungen in deren JList angezeigt werden. Ich hatte mir gedacht, das ich im ProfModel einfach ein VeranstModel anlege.

Java:
public class ProfModel extends AbstractListModel {

	ArrayList<Professur> pf;
	VeranstModel vModel;
	
	
	public ProfModel () {
		pf = new ArrayList<Professur>();
		vModel = new VeranstModel();
	}
	
	@Override
	public Professur getElementAt (int index) {
		return pf.get(index);
	}
	
	public void addElement (Professur prof) {
		pf.add(prof);
		fireIntervalAdded(pf, pf.size() - 1, pf.size() - 1);
	}
	
	public void deleteElement (int index) {
		pf.remove(index);
		fireIntervalRemoved(pf, index, index);
	}

	@Override
	public int getSize () {
		return pf.size();
	}
}

Kann das so funktionieren?

MfG
 

raffi

Mitglied
OK, ich probiers nochmal, hoffentlich antwortet jetzt wenigstens mal jemand ;)

Also ich bin jetzt schon soweit, das ich die JListen hoffentlich richtig verknüpft habe. Ich habe das Model der Veranstaltungsliste in der Professurklasse erstellt. Das klappt auch soweit und die Daten werden auch vollständig und ordnungsgemäß abgespeichert. Die Listen sind also gefüllt, aber nur in der JList der Professur werden mir die Namen der Professuren angezeigt. Die Veranstatungsliste bleibt leer.
Java:
public class Professur {

	private String kuerzel;
	private String name;
	private String professor;
	private String mail;
	private int mAnz;
	VeranstModel vModel;

	public Professur (String kuerzel, String name, String professor, String mail, int mAnz) {
		this.kuerzel = kuerzel;
		this.name = name;
		this.professor = professor;
		this.mail = mail;
		this.mAnz = mAnz;
		vModel = new VeranstModel();
	}

	public String getKuerzel() {
		return kuerzel;
	}

	public void setKuerzel(String kuerzel) {
		this.kuerzel = kuerzel;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getProfessor() {
		return professor;
	}

	public void setProfessor(String professor) {
		this.professor = professor;
	}

	public String getMail() {
		return mail;
	}

	public void setMail(String mail) {
		this.mail = mail;
	}

	public int getmAnz() {
		return mAnz;
	}

	public void setmAnz(int mAnz) {
		this.mAnz = mAnz;
	}
	
	public Veranstaltung getVeranstatung (int index) {
		return vModel.getElementAt(index);
	}
	
	public void setVeranstaltung (Veranstaltung v) {
		vModel.addElement(v);
	}
	
	public int getVeranstSize () {
		return vModel.vs.size();
	}

	@Override
	public String toString() {
		return name;
	}
}
In der Main-Klasse sieht das ganze dann folgendermaßen aus:
Java:
JList veranstList;
...
public Main () {
...
		veranstList = new JList();
		veranstList.setPreferredSize(new Dimension(200, 250));
...
	}
...
class ProfSelectionListener implements ListSelectionListener {

		@Override
		public void valueChanged(ListSelectionEvent arg0) {
			int index = profList.getSelectedIndex();
			veranstList = new JList(prof.pf.get(index).vModel);
		}
	}

Sobald ich eine Professur anwähle müsste doch auch die veranstList gefüllt werden oder?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E JDialog mit count down timer AWT, Swing, JavaFX & SWT 1
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
A ViewController (IFrame) > Jdialog > Model AWT, Swing, JavaFX & SWT 1
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
L JDialog hat manchmal keinen Inhalt AWT, Swing, JavaFX & SWT 2
Drachenbauer Hauptfenster erhält schmale Streifen rechts unt unten, wenn ich einen JDialog hinzufüge. AWT, Swing, JavaFX & SWT 19
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
B Eingaben im JDialog abwarten AWT, Swing, JavaFX & SWT 4
S Swing JDialog mit KeyEvent als Rückgabe AWT, Swing, JavaFX & SWT 1
O Swing JDialog öffnen und dann warten bis er geschlossen wurde AWT, Swing, JavaFX & SWT 2
stylegangsta JDialog bestimmte Zeilen kursiv AWT, Swing, JavaFX & SWT 20
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
Bluedaishi JDialog modal und JTextArea AWT, Swing, JavaFX & SWT 4
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
T Event Handling JDialog schließen, sobald ein neuer erzeugt wird AWT, Swing, JavaFX & SWT 3
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
D Button auf geöffnetem JDialog AWT, Swing, JavaFX & SWT 5
N Definitionen JDialog AWT, Swing, JavaFX & SWT 7
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
N Swing Fragen zu non-modal JDialog AWT, Swing, JavaFX & SWT 1
F Swing JDialog schließen - WindowListener bekommt dispose nicht mit AWT, Swing, JavaFX & SWT 0
N JDialog als Progress-Anzeige AWT, Swing, JavaFX & SWT 6
M JDialog statt JFrame AWT, Swing, JavaFX & SWT 22
I focus an ein jdialog geben AWT, Swing, JavaFX & SWT 3
3 JDialog über einem Vollbildfenster anzeigen AWT, Swing, JavaFX & SWT 5
M JDialog soll JFrame "blockieren" AWT, Swing, JavaFX & SWT 2
K JDialog zeigt Components nicht an AWT, Swing, JavaFX & SWT 3
S Jframe aus JDialog starten AWT, Swing, JavaFX & SWT 4
M JDialog übergibt eingaben nicht an aufrufende klasse AWT, Swing, JavaFX & SWT 15
S Assistent im JDialog AWT, Swing, JavaFX & SWT 7
H Swing JDialog cannot be resolved as a typ AWT, Swing, JavaFX & SWT 12
C Swing JDialog "flutet" den Arbeitsspeicher AWT, Swing, JavaFX & SWT 9
S Swing Eigenen JDialog mit Rückgabewert AWT, Swing, JavaFX & SWT 3
C Swing JDialog Ladebildschirm wird nicht angezeit AWT, Swing, JavaFX & SWT 5
Jagson Mit JMenu auf jDialog zurück? Wie? AWT, Swing, JavaFX & SWT 8
A JDialog (modal) blockiert alle Fenster! AWT, Swing, JavaFX & SWT 2
Jagson Swing Von JDialog zu anderem JDialog wechseln AWT, Swing, JavaFX & SWT 2
S JDialog direkt über dem MainFrame aufpoppen lassen AWT, Swing, JavaFX & SWT 2
A Swing JDialog KeyBindings und Textfelder AWT, Swing, JavaFX & SWT 5
D Daten von JDialog an JTable in JFrame übergeben AWT, Swing, JavaFX & SWT 7
D JDialog: immer nur einer gleichzeitig AWT, Swing, JavaFX & SWT 4
S JDialog per Button schließen AWT, Swing, JavaFX & SWT 2
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
D JDialog alwaysOnTop, aber nur innerhalb der Applikation AWT, Swing, JavaFX & SWT 3
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
N Swing Klasse erbt von JDialog - Problem mit innerer ActionListener-Klasse AWT, Swing, JavaFX & SWT 6
J Swing JDialog gleichzeitig mit JFrame anzeigen AWT, Swing, JavaFX & SWT 8
S Probleme jDialog einfügen AWT, Swing, JavaFX & SWT 4
qwerqer Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen AWT, Swing, JavaFX & SWT 3
S Schrift ändern in JDialog AWT, Swing, JavaFX & SWT 3
S Problem mit JDialog AWT, Swing, JavaFX & SWT 3
D Elternfenster vom JDialog aktualisieren oder nicht ? AWT, Swing, JavaFX & SWT 7
hdi Swing Genaue Funktionsweise von modalem JDialog? AWT, Swing, JavaFX & SWT 11
U JDialog ohne Taskleiste AWT, Swing, JavaFX & SWT 7
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
X JEditorPane Größe in JDialog automatisch anpassen AWT, Swing, JavaFX & SWT 2
Ollek JDialog Koponenten neu anordnen AWT, Swing, JavaFX & SWT 3
A JDialog AWT, Swing, JavaFX & SWT 10
Dit_ SwingUtilities.invokeLater und Modaler JDialog AWT, Swing, JavaFX & SWT 11
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A JDialog ausdrucken AWT, Swing, JavaFX & SWT 7
aze JDialog mit runden ecken AWT, Swing, JavaFX & SWT 8
Dit_ JDialog nur horizontal vergrößern AWT, Swing, JavaFX & SWT 3
C Swing JProgressBar in JDialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
M Swing Vererbung, Probleme mit JDialog AWT, Swing, JavaFX & SWT 12
H JDialog, Modal - Klassenübergreifend => Problem AWT, Swing, JavaFX & SWT 5
S Swing Bild (Gif) in Bitte warten JDialog AWT, Swing, JavaFX & SWT 6
U JFrame minimiert nach JDialog, JOptionPane AWT, Swing, JavaFX & SWT 3
K Swing JDialog aus Frame ausrufen AWT, Swing, JavaFX & SWT 2
B JDialog über JFileChooser anzeigen AWT, Swing, JavaFX & SWT 6
B JDialog AWT, Swing, JavaFX & SWT 6
J Swing Probmel mit JDialog (Modal/FocusLost/Button) AWT, Swing, JavaFX & SWT 5
E Swing Fehlerhaftes Verhalten bei gleichzeitigen Verwendnen von PopUpMenu und JDialog?! AWT, Swing, JavaFX & SWT 5
J Swing JDialog mit static-Funktion anzeigen -> Rückgabewert AWT, Swing, JavaFX & SWT 3
E Daten von JDialog nach JFrame übertragen AWT, Swing, JavaFX & SWT 4
F ActionListener von JButton funktioniert mit JFrame aber nicht mit JDialog AWT, Swing, JavaFX & SWT 2
D Mehrere Comboboxen in JDialog AWT, Swing, JavaFX & SWT 2
F JDialog per Button schliessen - klappt nicht AWT, Swing, JavaFX & SWT 4
BattleMaster246 JDialog erscheint in der Taskbar AWT, Swing, JavaFX & SWT 7
H Sub-Dialog von modalem JDialog aus aufrufen - geht das? AWT, Swing, JavaFX & SWT 6
P Swing eigenen Modalen JDialog AWT, Swing, JavaFX & SWT 6
J JDialog verliert Werte AWT, Swing, JavaFX & SWT 3
N Variablen an JDialog übergeben AWT, Swing, JavaFX & SWT 2
P Swing JDialog schliesst nicht AWT, Swing, JavaFX & SWT 2
X Swing JDialog von JInternalFrames überlappen lassen AWT, Swing, JavaFX & SWT 2
O JDialog-JScrollPane-JTable Problem AWT, Swing, JavaFX & SWT 3
N Swing Frage zu modalem JDialog. AWT, Swing, JavaFX & SWT 16
A JFrame oder JDialog AWT, Swing, JavaFX & SWT 12
B Swing JDialog : Herausfinden wie dieser beendet wurde? AWT, Swing, JavaFX & SWT 2
T JDialog ohne Fenstermanager? AWT, Swing, JavaFX & SWT 2
S JDialog in der Taskbar anzeigen AWT, Swing, JavaFX & SWT 3
A Swing JFrame Werte aus JDialog übergeben AWT, Swing, JavaFX & SWT 4
K Swing JDialog ohne Titlebar mit Rahmen AWT, Swing, JavaFX & SWT 5
KrokoDiehl Swing KeyEvents für JDialog / JFrame AWT, Swing, JavaFX & SWT 2
C Swing JComboBox in JDialog AWT, Swing, JavaFX & SWT 3
F Frage zu Dialogen mit JDialog -Erstellung des Konstruktors AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben