Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster

Alex2013

Bekanntes Mitglied
Hallo,

zuerst einmal das etwas wichtigere. Ich habe vor einiger Zeit mal ein Programm gepostet, da ich dort Hilfe brauchte. Ich habe dieses jetzt erweitert.
Bei dem Programm werden oben am Rand Radio Buttons dargestellt und ich kann verschiedene Angaben machen. Wenn ich auf weiter klicke öffnet sich das Fenster erneut und ich wähle den anderen Radio Button aus. Nachdem ich die Angaben mache und auf weiter klicke öffnet sich erneut ein Fenster in welchem mir die Eingaben noch einmal gezeigt werden.
Allerdings zeigt mir das Fenster auch an, das der Focus wohl immer noch auf dem ersten Radio Button steht.
Wie kann ich erreichen, dass sich der Focus hier löst und auf den zweiten Button geht und sich der Text auch korrekt anpasst?
Außerdem möchte ich erreichen, dass nach der zweiten Eingabe, die Eigenschaften beider Fenster ein einem noch einmal angezeigt werden.
Hat hier jemand eine Idee, wie ich das realisieren könnte? Mir ist dazu bisher nichts gutes eingefallen... :-(

Hier der Code:

Java:
[code]
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;


public class Partner_finden_mainapp extends JFrame 
{
	private static final long serialVersionUID = 1L;
	JLabel l1,l2,l3,l4,l5,l6,l7,l8,l9,l10;
	JTextField tf1,tf2,tf3,tf4,tf5,tf6,tf7,tf8,tf9;
	JButton b1,b2;
	JPanel p1;
	JRadioButton rb1,rb2;
	ButtonGroup bg;//=new ButtonGroup();
	Button1_Listener bl1=new Button1_Listener();
	Button2_Listener bl2=new Button2_Listener();
	
	public Partner_finden_mainapp(String titel)
	{
		setLayout(new GridLayout(11,3));
		setTitle(titel);
		setLocation(300,400);
		add(l10=new JLabel("Geschlecht: ",JLabel.RIGHT));
		add(p1=new JPanel());		
		p1.add(rb1=new JRadioButton("männlich"));
		rb1.setSelected(true);
		p1.add(rb2=new JRadioButton("weiblich"));
		bg=new ButtonGroup();
		bg.add(rb1);
		bg.add(rb2);
		add(l1=new JLabel("Name: ",JLabel.RIGHT));
		add(tf1=new JTextField());
		add(l2=new JLabel("Wohnort: ",JLabel.RIGHT));
		add(tf2=new JTextField());
		add(l9=new JLabel("Land: ",JLabel.RIGHT));
		add(tf9=new JTextField());
		add(l3=new JLabel("Geburtsdatum: ",JLabel.RIGHT));
		add(tf3=new JTextField());
		add(l4=new JLabel("Größe: ",JLabel.RIGHT));
		add(tf4=new JTextField());
		add(l5=new JLabel("Gewicht: ",JLabel.RIGHT));
		add(tf5=new JTextField());
		add(l6=new JLabel("Haarfarbe: ",JLabel.RIGHT));
		add(tf6=new JTextField());
		add(l7=new JLabel("Augenfarbe: ",JLabel.RIGHT));
		add(tf7=new JTextField());
		add(l8=new JLabel("Hobbies: ",JLabel.RIGHT));
		add(tf8=new JTextField());
		add(b1=new JButton("Zurücksetzen"));
		add(b2=new JButton("Weiter"));
		b1.addActionListener(bl1);
		b2.addActionListener(bl2);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setVisible(true);
	}
	
	class Button1_Listener implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent e) 
		{
			if(e.getActionCommand().equals("Zurücksetzen"))
			{
				clean();
			}
		}
	}
	class Button2_Listener implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent e) 
		{
			if(e.getActionCommand().equals("Weiter"))
			{
				String ausgabe="Partner 1";
				JOptionPane.showMessageDialog(null,ausgabe+"\n"+"Geschlecht: "+rb1.getText()+"\n"+"Name: "+tf1.getText()+"\n"+"Wohnort: "+tf2.getText()+"\n"+"Land: "+tf9.getText()+"\n"+"Geburtsdatum: "+tf3.getText()+"\n"+"Größe: "+tf4.getText()+"\n"+"Gewicht: "+tf5.getText()+"\n"+"Haarfarbe: "+tf6.getText()+"\n"+"Augenfarbe: "+tf7.getText()+"\n"+"Hobbies: "+tf8.getText());
			}new Partner_finden_mainapp("Partner 2");
			//diese beiden ausrufe erst gerade hinzugefügt, bringt aber nichts
			rb1.setSelected(false);
			rb2.setSelected(true);
		}
	}
	
	public void clean()
	{
		tf1.setText("");
		tf2.setText("");
		tf3.setText("");
		tf4.setText("");
		tf5.setText("");
		tf6.setText("");
		tf7.setText("");
		tf8.setText("");
		tf9.setText("");
	}
	public static void main(String[] args) 
	{
		new Partner_finden_mainapp("Partner 1");
	}
}
[/code]

Ich danke euch schon mal für eure Antworten

Lg
 
Java:
 rb1.setSelected(false);
            rb2.setSelected(true);

Die Zeilen bringen deshalb nichts, weil du somit die Buttons des ersten Fensters änderst.
Du musst die Instanz des zweiten merken:
-->
Java:
			Partner_finden_mainapp mainmap2 = new Partner_finden_mainapp("Partner 2");
			mainmap2.rb1.setSelected(false);
			mainmap2.rb2.setSelected(true);

Aber was ist wenn ich als Partner 1 schon weiblich eingetragen habe? Du kannst das meiner Meinung nach so nicht machen. Dann doch vlt eher so
[Java]
if(rb1.isSelected()){
mainmap2.rb1.setSelected(false);
mainmap2.rb2.setSelected(true);
}
[/code]

Mit dem zweiten Problem bei der Ausgabe würde ich dir vorschlagen den Code generell etwas umzubauen und dir es gleich richtig anzueignen. Erstelle dir Personenobjekte und evtl. eine Klasse Relationship o.ä. in der du die Daten ablegst und bei Bedarf ausgeben kannst.

[OT]Du solltest dir auch einmal http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367 anschauen 🙂[/OT]
 
Zuletzt bearbeitet:
Ich habe jetzt mal versucht deinen Code im zweiten Button mit unterzubringen.
Jetzt springt zwar der Radio Button automatisch auf weiblich, aber der Text der im anschließenden Fenster angezeigt wird ist immer noch Partner 1, männlich :-(

Oder habe ich den Code an einer falschen Stelle eingefügt?

Code:

Java:
[code]
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;


public class Partner_finden_mainapp extends JFrame 
{
	private static final long serialVersionUID = 1L;
	JLabel l1,l2,l3,l4,l5,l6,l7,l8,l9,l10;
	JTextField tf1,tf2,tf3,tf4,tf5,tf6,tf7,tf8,tf9;
	JButton b1,b2;
	JPanel p1;
	JRadioButton rb1,rb2;
	ButtonGroup bg;//=new ButtonGroup();
	Button1_Listener bl1=new Button1_Listener();
	Button2_Listener bl2=new Button2_Listener();
	
	public Partner_finden_mainapp(String titel)
	{
		setLayout(new GridLayout(11,3));
		setTitle(titel);
		setLocation(300,400);
		add(l10=new JLabel("Geschlecht: ",JLabel.RIGHT));
		add(p1=new JPanel());		
		p1.add(rb1=new JRadioButton("männlich"));
		rb1.setSelected(true);
		p1.add(rb2=new JRadioButton("weiblich"));
		bg=new ButtonGroup();
		bg.add(rb1);
		bg.add(rb2);
		add(l1=new JLabel("Name: ",JLabel.RIGHT));
		add(tf1=new JTextField());
		add(l2=new JLabel("Wohnort: ",JLabel.RIGHT));
		add(tf2=new JTextField());
		add(l9=new JLabel("Land: ",JLabel.RIGHT));
		add(tf9=new JTextField());
		add(l3=new JLabel("Geburtsdatum: ",JLabel.RIGHT));
		add(tf3=new JTextField());
		add(l4=new JLabel("Größe: ",JLabel.RIGHT));
		add(tf4=new JTextField());
		add(l5=new JLabel("Gewicht: ",JLabel.RIGHT));
		add(tf5=new JTextField());
		add(l6=new JLabel("Haarfarbe: ",JLabel.RIGHT));
		add(tf6=new JTextField());
		add(l7=new JLabel("Augenfarbe: ",JLabel.RIGHT));
		add(tf7=new JTextField());
		add(l8=new JLabel("Hobbies: ",JLabel.RIGHT));
		add(tf8=new JTextField());
		add(b1=new JButton("Zurücksetzen"));
		add(b2=new JButton("Weiter"));
		b1.addActionListener(bl1);
		b2.addActionListener(bl2);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setVisible(true);
	}
	
	class Button1_Listener implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent e) 
		{
			if(e.getActionCommand().equals("Zurücksetzen"))
			{
				clean();
			}
		}
	}
	class Button2_Listener implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent e) 
		{
			if(e.getActionCommand().equals("Weiter"))
			{
				String ausgabe="Partner 1";
				JOptionPane.showMessageDialog(null,ausgabe+"\n"+"Geschlecht: "+rb1.getText()+"\n"+"Name: "+tf1.getText()+"\n"+"Wohnort: "+tf2.getText()+"\n"+"Land: "+tf9.getText()+"\n"+"Geburtsdatum: "+tf3.getText()+"\n"+"Größe: "+tf4.getText()+"\n"+"Gewicht: "+tf5.getText()+"\n"+"Haarfarbe: "+tf6.getText()+"\n"+"Augenfarbe: "+tf7.getText()+"\n"+"Hobbies: "+tf8.getText());
			}
			Partner_finden_mainapp mainapp2 =new Partner_finden_mainapp("Partner 2");
			//das bringt leider noch keine Besserung, auch nicht wenn ich die beiden Befehle
			//über der if abfrage aufrufe
			if(rb1.isSelected())
			{
				mainapp2.rb1.setSelected(false);
				mainapp2.rb2.setSelected(true);
			}
		}
	}
	
	public void clean()
	{
		tf1.setText("");
		tf2.setText("");
		tf3.setText("");
		tf4.setText("");
		tf5.setText("");
		tf6.setText("");
		tf7.setText("");
		tf8.setText("");
		tf9.setText("");
	}
	public static void main(String[] args) 
	{
		new Partner_finden_mainapp("Partner 1");
	}
}
[/code]
 
Ich melde mich nach einigen anderen kleineren Projekten, welche auch mit Hilfe geglückt sind, wieder zurück.
Das Programm arbeitet jetzt grundlegend korrekt. Ich habe etwas am Code geändert und der Ablauf stimmt soweit.
Ich habe auch deine Abfrage @eRaaaa umgestellt. Allerdings will Eclipse das irgendwie nicht ändern... :-(
Ich weiß nicht wieso. Ich habe deinen letzten Tipp noch nicht in die Tat umgesetzt, da ich es noch einmal so versuchen wollte. Hast du für diese Vorgehensweise evtl. noch einen Tipp, wie der RadioButton automatisch den Focus ändert und der Text "Partner 2" ausgegeben wird?

Sonst muss ich es wohl auf eine andere Art versuchen...
Es wäre super, wenn du dir das noch einmal anschauen könntest oder wenn sich das Programm jemand anderes einmal anschauen könnte und mir sagen könnte, wo mein Fehler liegt 🙂

Hier der Code:

Java:
[code]
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;


public class Partner_finden_mainapp extends JFrame 
{
	private static final long serialVersionUID = 1L;
	JLabel l1,l2,l3,l4,l5,l6,l7,l8,l9,l10;
	JTextField tf1,tf2,tf3,tf4,tf5,tf6,tf7,tf8,tf9;
	JButton b1,b2;
	JPanel p1;
	JRadioButton rb1,rb2;
	ButtonGroup bg;//=new ButtonGroup();
	Button1_Listener bl1=new Button1_Listener();
	Button2_Listener bl2=new Button2_Listener();
	String ausgabe,ausgabe2;
	
	public Partner_finden_mainapp(String titel)
	{
		setLayout(new GridLayout(11,3));
		setTitle(titel);
		setLocation(300,400);
		add(l10=new JLabel("Geschlecht: ",JLabel.RIGHT));
		add(p1=new JPanel());		
		p1.add(rb1=new JRadioButton("maennlich"));
		rb1.setSelected(true);
		p1.add(rb2=new JRadioButton("weiblich"));
		bg=new ButtonGroup();
		bg.add(rb1);
		bg.add(rb2);
		add(l1=new JLabel("Name: ",JLabel.RIGHT));
		add(tf1=new JTextField());
		add(l2=new JLabel("Wohnort: ",JLabel.RIGHT));
		add(tf2=new JTextField());
		add(l9=new JLabel("Land: ",JLabel.RIGHT));
		add(tf9=new JTextField());
		add(l3=new JLabel("Geburtsdatum: ",JLabel.RIGHT));
		add(tf3=new JTextField());
		add(l4=new JLabel("Groesse: ",JLabel.RIGHT));
		add(tf4=new JTextField());
		add(l5=new JLabel("Gewicht: ",JLabel.RIGHT));
		add(tf5=new JTextField());
		add(l6=new JLabel("Haarfarbe: ",JLabel.RIGHT));
		add(tf6=new JTextField());
		add(l7=new JLabel("Augenfarbe: ",JLabel.RIGHT));
		add(tf7=new JTextField());
		add(l8=new JLabel("Hobbies: ",JLabel.RIGHT));
		add(tf8=new JTextField());
		add(b1=new JButton("Zuruecksetzen"));
		add(b2=new JButton("Weiter"));
		b1.addActionListener(bl1);
		b2.addActionListener(bl2);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setVisible(true);
	}
	
	class Button1_Listener implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent e) 
		{
			if(e.getActionCommand().equals("Zuruecksetzen"))
			{
				clean();
			}
		}
	}
	class Button2_Listener implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent e) 
		{	//wenn auf weiter geklickt wird, wird ein Ausgabefenster mit den getätigten Eingaben ausgeworfen
			if(e.getActionCommand().equals("Weiter"))
			{
				ausgabe="Partner 1";
				JOptionPane.showMessageDialog(null,ausgabe+"\n"+"Geschlecht: "+rb1.getText()+"\n"+"Name: "+tf1.getText()+"\n"+"Wohnort: "+tf2.getText()+"\n"+"Land: "+tf9.getText()+"\n"+"Geburtsdatum: "+tf3.getText()+"\n"+"Groesse: "+tf4.getText()+"\n"+"Gewicht: "+tf5.getText()+"\n"+"Haarfarbe: "+tf6.getText()+"\n"+"Augenfarbe: "+tf7.getText()+"\n"+"Hobbies: "+tf8.getText());
				dispose();
			}
			//das schließt der Benutzer anschließend und es wird ein zweites Fenster für Eingaben geöffnet
			Partner_finden_mainapp mainapp2 =new Partner_finden_mainapp("Partner 2");
			//hier wird abgefragt, ob im ersten Konstruktor ein radiobutton ausgewählt wurde und ob es ein objekt ausgabe gibt welches dem objekt ausgabe gleicht
			if(mainapp2.rb1.isSelected()&&(mainapp2.ausgabe.equals(ausgabe)))
			{	//ist das der fall, soll in der ausgabe die ziffer 1 durch 2 ersetzt werden und der rb1 deaktiviert und rb2 aktiviert werden
				ausgabe2=ausgabe.replace('1','2');
				rb1.setSelected(false);
				rb2.setSelected(true);
			}
		}
	}
	
	public void clean()
	{
		rb1.setSelected(false);
		rb2.setSelected(false);
		tf1.setText("");
		tf2.setText("");
		tf3.setText("");
		tf4.setText("");
		tf5.setText("");
		tf6.setText("");
		tf7.setText("");
		tf8.setText("");
		tf9.setText("");
	}
	public static void main(String[] args) 
	{
		new Partner_finden_mainapp("Partner 1");
	}
}
[/code]

Lg
 

Zurück
Oben