Es wird leider nur ein Listener ausgeführt.

Status
Nicht offen für weitere Antworten.

tritko1

Bekanntes Mitglied
Habe insgesamt 7 java Dateien, die voneinander erben. Hierarchie (Von Superklasse bis Subklasse): IZBPanel, AmountPanel, ShowPanel, PrintPanel, DecisionPanel. Außerdem habe ich noch eine Testclass, um die ganzen Konstruktoren aufzurufen und eine Actionclass, in denen 2 ActionListener stehen.

Der eine Listener des IZBPanels wird leider nicht ausgeführt, wieso weiß ich allerdings nicht.

Kennt Ihr denn mein Problem? Danke für eure Hilfe....



IZBPanel.java

Code:
 public class IZBPanel extends JPanel
{
	//Deklaration
	ButtonGroup group=new ButtonGroup();
	static JRadioButton blager; 
	static JRadioButton blinie;
	static JRadioButton breserve;
	
	static boolean lager=false;
	static boolean linie=false;
	static boolean reserve=false;
	
	public IZBPanel()
	{
		 	
		setLayout(null);
		JLabel abfrizbart = new JLabel ("Welche Art von IZB´s soll ausgedruckt werden?");
		abfrizbart.setBounds(10,5,300,20);
		add(abfrizbart);
	
		blager = new JRadioButton("Lager");
		blager.setBounds(50,40,80,20);								
		group.add(blager);
		
		blinie = new JRadioButton("Linie");
		blinie.setBounds(150,40,80,20);									
		group.add(blinie);
		
		JRadioButton breserve = new JRadioButton("Reserve");
		breserve.setBounds(250,40,80,20);
		group.add(breserve);
		
		add(blager);
		add(blinie);
		add(breserve);
		
		JSeparator trennzeichen=new JSeparator(SwingConstants.HORIZONTAL);
		trennzeichen.setBounds(0, 80, 400, 30);
		add(trennzeichen);
		
		//Listener
		blager.addActionListener(new ActionClass());
		blinie.addActionListener(new ActionClass());
		breserve.addActionListener(new ActionClass());
	}//end Konstruktor
		
}//endclass



ShowPanel.java

Code:
 public class ShowPanel extends AmountPanel
{
	ButtonGroup group2=new ButtonGroup();
	static JRadioButton ja;
	static JRadioButton nein;
	
	static boolean abfrageja=false;
	static boolean abfragenein=false;
	
		public ShowPanel() 
		{
			 
			//setLayout(null);
			JLabel abfrizbanzeige = new JLabel ("Sollen die IZB´s vor dem Ausdruck angezeigt werden?");
			abfrizbanzeige.setBounds(10,195,350,20);
			add(abfrizbanzeige);
	
			ja = new JRadioButton("ja");
			ja.setBounds(50,230,80,20);								
			group2.add(ja);
		
			nein = new JRadioButton("nein");
			nein.setBounds(250,230,80,20);									
			group2.add(nein);
			
			add(ja);
			add(nein);
		
			JSeparator trennzeichen=new JSeparator(SwingConstants.HORIZONTAL);
			trennzeichen.setBounds(0, 270, 400, 30);
			add(trennzeichen);
			
			//Listener
			ja.addActionListener(new ActionClass());
			nein.addActionListener(new ActionClass());
		}//endKonstruktor

}//end class



ActionClass.java

Code:
 public class ActionClass implements ActionListener
{
	public void actionPerformed (ActionEvent me)
	{
		if (me.getSource()==IZBPanel.blager)
						{
							IZBPanel.lager=true;
							//System.out.print(IZBPanel.lager);
					
						}
				
						if (me.getSource()==IZBPanel.blinie)
						{
							IZBPanel.linie=true;
						}
		
						if (me.getSource()==IZBPanel.breserve)
						{
							IZBPanel.reserve=true;
						}
						
						if (me.getSource()==ShowPanel.ja)
						{
							ShowPanel.abfrageja=true;
						}
		
						if (me.getSource()==ShowPanel.nein)
						{
							ShowPanel.abfragenein=true;
						}
	}
}



TestClass.java

Code:
 public class Testclass {

	public static void main(String[] args) 
	{
		
		JFrame f = new JFrame("Einstellungen für das Drucken der IZB´s");
		f.setBounds(0, 0, 400, 600);
		f.setResizable(false);
		f.setLocation(350, 70);
		
		IZBPanel i = new IZBPanel();
		AmountPanel a=new AmountPanel();
		ShowPanel s=new ShowPanel();
		PrinterPanel p=new PrinterPanel();
		DecisionPanel d=new DecisionPanel();
		
		f.getContentPane().add(i);
		f.getContentPane().add(a);
		f.getContentPane().add(s);
		f.getContentPane().add(p);
		f.getContentPane().add(d);
		f.setVisible(true);
	}
}
 
> Actionclass, in denen 2 ActionListener stehen.

wo sind da 2 Listener?
Actionclass ist selber ein ActionListener, aber für sich doch nur einer,
was bedeutet 2?

> Der eine Listener des IZBPanels wird leider nicht ausgeführt, wieso weiß ich allerdings nicht.

WELCHER einer? und das klingt schon wieder nach 'der eine von zweien',
dabei erzeugst du doch 3 verschiedene in IZBPanel (3x new Actionclass())?

was geht nicht?, wird keine Aktion durchgeführt?
schreibe doch mal
System.out.print("Actionclass aufgerufen");
zu Beginn von
public void actionPerformed (ActionEvent me)
in Actionclass,
erscheint diese Meldung auch nicht?

------

in Konstruktor von IZBPanel erzeugst du mit
JRadioButton breserve = new JRadioButton("Reserve");
eine neue lokale Variable breserve,
die Exemplarvariable breserve bleibt null,

schreibe
breserve = new JRadioButton("Reserve");
statt
JRadioButton breserve = new JRadioButton("Reserve");
 
Danke für deine Aufklärung....

Also es handelt sich hier nur um einen ActionListener - es wird auch immer der ActionListener aufgerufen.

Was mein Problem ist:

Ich möchte, das sich, wenn er auf den JRadioButton blager, blinie oder breserve drückt, die Variablen lager, linie oder reserve auf true setzt.

Bei den JRadioButtons ja bzw. nein funktioniert dies, aber bei den anderen nicht. Hat dies was mit der Vererbung was zu tun, das er die Variablen immer wieder neu initialisiert?

Wie kann ich das Problem lösen, ohne das sich die Oberfläche (Frame) dabei ändert?

Danke für deine Hilfe
 
das glaube ich nicht, dass das nicht geht,
hast du den von mir angegebenen Tipp mit den System.out.println noch nicht getestet?
das glaube ich schon eher 😉

edit:
halt, die Buttons sind in statischen Variablen gespeichert,
wenn du 5 Panels erzeugst, dann werden diese Variablen ständig überschrieben,
die meisten ActionListener werden also nicht funktionieren, der letzte aber schon?

also überleg dir was anderes, was soll überhaupt passieren, willst du alle Buttons 5x haben für 5 Panel?
 
Habe deinen Tip durchgemacht, in dem ich direkt nach actionPerformed die Ausgabe gemacht habe und es wird zweimal ausgeführt, wie es sein sollte.

Erzeuge ich fünf Panels, wenn ich in der Superklasse extends JPanel schreibe? Der letzte ActionListener übernimmt die Werte, das heißt, wenn ich einen JRadioButton (ja oder nein) anklicke, dann wird eine Variable von false auf true gesetzt.

Was anderes überlegen? Mach schon ungef. 2 Tage an diesem Problem herum, aber ich komme zu keinem Ergebnis.

Danke nochmals......
 
du hast keine Frage gestellt,
eher
'Was anderes überlegen? nun, dann mache ich mal weiter'

was möchtest du denn? das die ActionListener nur diese wenigen Aktionen durchführen?
du erstellst für jeden Button eh ein eigenen ActionListener,
dann gib dem doch im Konstruktor einen Parameter mit,
Type 1,2,3,4 oder 5,
und anhand dessen wird die Aktion ausgewählt,
 
Ich möchte insgesamt 5 Jpanels machen und in einem Frame reinpacken. Ist das bei mir der Fall, oder habe ich nur ein JPanel? Ich habe bei der Superklasse extends JPanel gemacht und habe bei den anderen Klassen immer extensiert - immer den Vorgänger (siehe Klassenhierarchie).

Wenn ich doch dem Konstruktor Parameter mitgebe, dann hab ich doch das gleiche Problem.

Er wird mir die Variablen trotzdem überschreiben, oder verstehe ich das falsch?
 
du erzeugst 5 Panel-Objekte, mit verschiedenen Inhalt,
das sind 5 verschiede

du brauchst die Buttons ja gar nicht, du benutzt die statischen Referenzen nur zur Unterscheiden,

wenn du nun 1,2,3,4 und genauso statisch speichern würdest,
dann hättest du das gleichen Problem, ja,
deshalb mein Vorschlag, diese als Parameter an den ActionListener zu übergeben und natürlich dort lokal (nicht statisch!) zu speichern,

dann die Unterscheidung
if (meinTyp == 0) {
lager
} else if (meinTyp == 1) {
...
}

meinTyp kann von niemanden überschrieben werden
 
Kannst du mir mal ein beispiel dafür geben?

In Bezug auf mein Programm? Oh mann, ich steh auf dem Schlauch
 
Code:
public class ActionClass implements ActionListener {
  public static final int LAGER_TYP = 0;
  public static final int LINIE_TYP = 1;
  ...

  private int typ;

   public ActionClass(int typ) {
      this.typ = typ;
   }
 
   public void actionPerformed (ActionEvent me)
   {
      if (typ == LAGER_TYP)
                  {
                     IZBPanel.lager=true;
                     //System.out.print(IZBPanel.lager);
               
                  }
      ...            
   }
} 

---------

blager.addActionListener(new ActionClass(ActionClass.LAGER_TYP));
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben