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]
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]