Probleme mit JDialog

Status
Nicht offen für weitere Antworten.

ylvi

Mitglied
Hi,

Ich hab ein Poblem mit JDialog.
Wenn ich in der Menübar den Punkt Bericht anklicke, soll ein JDialog geöffnet werden, in dem erstmal eine Combobox erscheint. Danach sollen nacheinander die Comboboxen aufgerufen werden(je nachdem was in der letzten Combobox selectiert wurde, sollen dort bestimmte Werte aus der DB stehen). Zuletzt werden dann die Buttons aufgerufen.
Soweit so gut, beim ersten Aufruf funktioniert das auch, aber wenn ich den Menüpunkt nochmal aufrufe erscheint das JDialogfenster mit allen Comboboxen und den Buttons. In den Comboboxen werden dann die Werte angezeigt, die beim letzten Mal eingestellt wurden. Das würde mich nicht unbedingt stören(schöner wäre es natürlich, wenn wieder nur die erste Combobox erscheinen würde), aber wenn ich dann in den Comboboxen Änderungen vornehme und den Ok-Button anklicke wird die actionPerformed-Methode 5 mal nacheinander ausgeführt.
Das ganze wird dann immer mehr, also wenn ich den Menüpunkt ein Drittes Mal aufrufe wird die Methode 15 mal ausgeführt usw.
Das Ergebnis, ist zwar das was ich haben will, aber das ist natürlich nicht akzeptabel.
Ich habe den Quellcode mal so geändert, das die Werte aus der DB mit Zahlen ersetzt werden. Alles andere funktioniert genauso wie im Original.
Ich habe schon alles mögliche probiert mit remove und dispose usw., nichts hat geholfen, was ist falsch?
Oder ist sowas mit JDialog gar nicht möglich?

Danke im Vorraus

Gruß Ulf

[HIGHLIGHT="Java"]package all;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class newFrame extends JFrame implements ActionListener,ItemListener{


private JMenuBar mb = new JMenuBar();
private JDialog dialog = new JDialog();
private JPanel panel5 = new JPanel();
private JLabel lab_kl_b = new JLabel("Klasse:");
private JLabel lab_ort_b = new JLabel("Wettkampfort:");
private JLabel lab_dat_b = new JLabel("Datum:");
private JLabel lab_saison_b = new JLabel("Saison:");
private JComboBox cb_bericht_saison = new JComboBox();
private JComboBox cb_bericht_kl = new JComboBox();
private JComboBox cb_bericht_ort = new JComboBox();
private JComboBox cb_bericht_dat = new JComboBox();
private JButton jb_ok_bericht = new JButton("OK");
private JButton jb_close_bericht = new JButton("Schließen");
private int y = 0;
private String sel_dat_b = new String();
private String sel_kl_b = new String();
private String sel_ort_b = new String();
private String sel_saison_b = new String();


public newFrame(){
super();
menue();
s_bericht();
this.setExtendedState(MAXIMIZED_BOTH);
this.setBackground(Color.DARK_GRAY);
this.setLayout(null);
this.setJMenuBar(mb);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);

}
private void menue() {

JMenu datei = new JMenu("Datei");
JMenu neu = new JMenu("Neu");
JMenu öffnen = new JMenu("Öffnen");
JMenuItem bericht = new JMenuItem("Bericht");
JMenuItem beenden = new JMenuItem("Beenden");
bericht.setActionCommand("bericht");
bericht.addActionListener(this);
beenden.setActionCommand("ende");
beenden.addActionListener(this);
öffnen.add(bericht);
datei.add(neu);
datei.add(öffnen);
datei.add(beenden);
mb.add(datei);
}

private void s_bericht(){

panel5.setSize(500, 360);
panel5.setLayout(null);
panel5.setBorder(BorderFactory.createLineBorder(Color.black, 2));
lab_saison_b.setSize(120, 30);
lab_saison_b.setLocation(50, 30);
cb_bericht_saison.setSize(210,30);
cb_bericht_saison.setName("b_Saison");
cb_bericht_saison.addItem("(Saison)");
for(int i = 0;i < 5;i++){
cb_bericht_saison.addItem(i);
}
cb_bericht_saison.setLocation(180, 30);
cb_bericht_saison.addItemListener(this);
panel5.add(lab_saison_b);
panel5.add(cb_bericht_saison);
panel5.setVisible(true);
panel5.validate();
panel5.repaint();
}
private void cb_bericht_kl(){

lab_kl_b.setSize(120, 30);
lab_kl_b.setLocation(50, 90);
cb_bericht_kl.setSize(210,30);
cb_bericht_kl.setName("b_Klasse");
cb_bericht_kl.addItem("(Klasse)");
for(int i = 0;i < 5;i++){
cb_bericht_kl.addItem(i);
}
cb_bericht_kl.setLocation(180, 90);
cb_bericht_kl.addItemListener(this);
panel5.add(cb_bericht_kl);
panel5.add(lab_kl_b);
panel5.validate();
panel5.repaint();
}
private void cb_bericht_ort(){

lab_ort_b.setSize(120, 30);
lab_ort_b.setLocation(50, 150);
cb_bericht_ort.setSize(210, 30);
cb_bericht_ort.setName("b_Ort");
cb_bericht_ort.addItem("(Ort)");
for(int i = 0;i < 5;i++){
cb_bericht_ort.addItem(i);
}
cb_bericht_ort.setLocation(180, 150);
cb_bericht_ort.addItemListener(this);
panel5.add(lab_ort_b);
panel5.add(cb_bericht_ort);
panel5.validate();
panel5.repaint();
}
private void cb_bericht_dat(){

lab_dat_b.setSize(120, 30);
lab_dat_b.setLocation(50, 210);
cb_bericht_dat.setSize(210, 30);
cb_bericht_dat.setName("b_Datum");
cb_bericht_dat.addItem("(Datum)");
try{
for(int i = 0;i < 5;i++){
cb_bericht_dat.addItem(i);
}
}catch(NullPointerException np){};
cb_bericht_dat.setLocation(180, 210);
cb_bericht_dat.addItemListener(this);
panel5.add(lab_dat_b);
panel5.add(cb_bericht_dat);
panel5.validate();
panel5.repaint();
}
private void button_bericht(){

jb_ok_bericht.setSize(90,30);
jb_close_bericht.setSize(90, 30);
jb_ok_bericht.setLocation(180,270);
jb_close_bericht.setLocation(300,270);
jb_ok_bericht.setActionCommand("ok");
jb_close_bericht.setActionCommand("close");
jb_ok_bericht.addActionListener(this);
jb_close_bericht.addActionListener(this);
panel5.add(jb_ok_bericht);
panel5.add(jb_close_bericht);
panel5.validate();
panel5.repaint();
}


@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub


if (e.getActionCommand().equalsIgnoreCase("bericht")) {

if(this.dialog != null){
this.dialog.remove(panel5);
this.dialog.validate();
this.dialog.repaint();
}
this.dialog.setSize(500, 360);
this.dialog.setLocation(400, 160);
this.dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.dialog.getContentPane().add(panel5);
this.dialog.setVisible(true);

}
if(e.getActionCommand().equalsIgnoreCase("ok")){
System.out.println(y);
y++;
this.dialog.dispose();
}
else if(e.getActionCommand().equalsIgnoreCase("close")){
this.dialog.dispose();
}
if("ende".equalsIgnoreCase(e.getActionCommand())){
System.exit(0);
}
}

@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
String[] x = new String[3];
x = e.toString().split("\\,");
x = x[2].split("\\ ");

if (x[2].equalsIgnoreCase("b_Saison")) {
if (ItemEvent.SELECTED == e.getStateChange()) {
if(e.getItem().toString().equalsIgnoreCase("(Saison)")){
}
else {
sel_saison_b = e.getItem().toString();
cb_bericht_kl.removeAllItems();
cb_bericht_kl();
}
}
} else if (x[2].equalsIgnoreCase("b_Klasse")) {
if (ItemEvent.SELECTED == e.getStateChange()) {
if(e.getItem().toString().equalsIgnoreCase("(Klasse)")){
}
else{
cb_bericht_ort.removeAllItems();
sel_kl_b = e.getItem().toString();
cb_bericht_ort();
}
}
} else if (x[2].equalsIgnoreCase("b_Ort")) {
if (ItemEvent.SELECTED == e.getStateChange()) {

if(e.getItem().toString().equalsIgnoreCase("(Ort)")){
}
else{
cb_bericht_dat.removeAllItems();
sel_ort_b = e.getItem().toString();
cb_bericht_dat();
}
}
} else if (x[2].equalsIgnoreCase("b_Datum")) {
if (ItemEvent.SELECTED == e.getStateChange()) {
if(e.getItem().toString().equalsIgnoreCase("(Datum)")){
}
else{
sel_dat_b = e.getItem().toString();
button_bericht();
}
}
}
}
}[/HIGHLIGHT]
 

Verjigorm

Top Contributor
Du rufst doch immer denselben Dialog mit denselben Panels und denselben darin enthaltenen Werten auf, das kann ja auch nicht gehen.

Du hast da etliche grundsätzliche Defizite im Programmierstil

Quick-And-Dirty-Fix:

Zu Beginn von s_bericht():
Code:
 //sorgt fürs Löschen von "Altlasten"              
               panel5.removeAll();
               cb_bericht_saison.removeItemListener(this);
               cb_bericht_saison.removeAllItems();
actionPerformed():
Code:
//                  if(this.dialog != null){
//                      this.dialog.remove(panel5);
//                      this.dialog.validate();
//                      this.dialog.repaint();
                      s_bericht();  //<---- initialisiert panel5 quasi neu
//                 }

Ganz generell ist das aber NUR damit es läuft, die falschen Grundsätze deiner Programmieridee bleiben aber erhalten
 
Zuletzt bearbeitet:

ylvi

Mitglied
Danke für Deine schnelle Antwort.
Nachdem ich Deine Vorschläge umgesetzt habe, funtionierte das zwar, dass bei erneutem Öffnen des JDialogs nur die erste Combobox erscheint, aber die actionPerformed-Methode wird trotzdem 5 mal bzw mehrmals ausgeführt.
Erst nachdem ich die Actionlistener der beiden Buttons am Beginn der actionperformed-Methode entfernen lasse, geht es richtig.

Da ich Anfänger bin ist es mir schon klar, dass ich keinen einwandfreien Code schreibe. Ich würde mich freuen, wenn Du mir die Defizite aufzeigen könntest oder mir eine Adresse
mitteilen könntest, wo man sich einen ordenlichen Programmierstil ansehen kann bzw mit der man sich diesen aneignen kann.

Gruß Ulf
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Probleme jDialog einfügen AWT, Swing, JavaFX & SWT 4
M Swing Vererbung, Probleme mit JDialog AWT, Swing, JavaFX & SWT 12
G Probleme mit static Methoden in JFrame/JDialog AWT, Swing, JavaFX & SWT 7
S Probleme mit JDialog AWT, Swing, JavaFX & SWT 3
G JDialog Probleme - Wertrückgabe AWT, Swing, JavaFX & SWT 3
B Eclipse RCP (e4) Anwendung mit JavaFX / e(fx)clipse - Upgrade Probleme AWT, Swing, JavaFX & SWT 2
Juelin Probleme bei Stage.close() AWT, Swing, JavaFX & SWT 23
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
E repaint Probleme AWT, Swing, JavaFX & SWT 13
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
J Probleme mit idividueller Tablecell AWT, Swing, JavaFX & SWT 0
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
J Probleme mit InputDialog AWT, Swing, JavaFX & SWT 4
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
pph080560 JavaFX Probleme mit FX AWT, Swing, JavaFX & SWT 3
M Probleme mit OpenJDK AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
U Opaque Probleme AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
S Probleme mit JComboboxen(?) AWT, Swing, JavaFX & SWT 18
S Swing Probleme mit MigLayout AWT, Swing, JavaFX & SWT 2
C Probleme mit createImage AWT, Swing, JavaFX & SWT 1
J Probleme mit contex Menu (javafx) AWT, Swing, JavaFX & SWT 1
J Probleme bei GameofLife AWT, Swing, JavaFX & SWT 24
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 0
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
D Swing Probleme mit dem Resizing AWT, Swing, JavaFX & SWT 7
G Probleme mit TextArea AWT, Swing, JavaFX & SWT 5
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing JProgressbar und Outoputstream probleme AWT, Swing, JavaFX & SWT 2
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
Z Probleme mit JPanel's AWT, Swing, JavaFX & SWT 6
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
A Probleme mit TilledBorder("***") AWT, Swing, JavaFX & SWT 4
F Bildschirmschoner Probleme mit Preview AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
N JTable probleme AWT, Swing, JavaFX & SWT 5
B Probleme bei ImageIO.read (?!) AWT, Swing, JavaFX & SWT 9
P JFrame Location-/Size-Probleme AWT, Swing, JavaFX & SWT 5
U LayoutManager Probleme mit Layouts AWT, Swing, JavaFX & SWT 5
C 3 kleine Probleme... AWT, Swing, JavaFX & SWT 13
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
M Probleme mit Verkleinern eines GUI AWT, Swing, JavaFX & SWT 7
B Swing label.setText() macht probleme AWT, Swing, JavaFX & SWT 5
B ImageIcon - Probleme mit dem Dateipfad AWT, Swing, JavaFX & SWT 5
H JTree Probleme AWT, Swing, JavaFX & SWT 9
F Probleme mit (Graphics g) II AWT, Swing, JavaFX & SWT 4
F Probleme mit (Graphics g) AWT, Swing, JavaFX & SWT 3
K 2D-Grafik .GIF macht mir Probleme AWT, Swing, JavaFX & SWT 14
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
T JTable Graphik probleme AWT, Swing, JavaFX & SWT 3
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
vandread Swing Probleme mit jTextField im zusammenspiel mit einem Einblendeffekt (inkl. KSKB) AWT, Swing, JavaFX & SWT 6
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
P Probleme mit setIconImage AWT, Swing, JavaFX & SWT 8
U Swing Probleme mit Asynchronen Prozessen und Swing: AWT, Swing, JavaFX & SWT 3
das-mo Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 6
N 2D-Grafik 2 Probleme beim zeichnen AWT, Swing, JavaFX & SWT 18
L Probleme mit JPanel AWT, Swing, JavaFX & SWT 8
D Probleme bei Übertrag von ArrayList in Jtable AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben