Über RadioButton öffnen?

Status
Nicht offen für weitere Antworten.

mobile

Bekanntes Mitglied
hi, habe hier ein kompliziertes Problem. Scheinbar kompliziert 🙂!

In diesem Fenster hier habe ich JRadioButtons erstellt:

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*; 

final public class CAbfrage extends JFrame
{
   //Behandlung für das Frame WindowLauscher
    final class CDialog extends WindowAdapter
   {
       final public void windowClosing(WindowEvent e)
      {
         setVisible(false);
      }
   }
   
   //Behandlung den Button Schließen
   final class CClose implements ActionListener
   {
      final public void actionPerformed(ActionEvent e)
      {
       	setVisible(false);
      }
   }
   
   //Behandlung den Button Öffnen
   final class COeffnen implements ActionListener
   {
      final public void actionPerformed(ActionEvent e)
      {
      	setVisible(false);
      }
   }
   
   //Kontruktor legt Schalter und Label an
   CAbfrage(String titel)
   {
      super(titel);   //Fenstertitel
      
      //layout des Fensters
      getContentPane().setLayout(new BorderLayout());
      
      //Panel für die RadioButtons
      JPanel radio = new JPanel();
      JRadioButton april = new JRadioButton("April 2006");
      JRadioButton mai = new JRadioButton("Mai 2006");
      JRadioButton juni = new JRadioButton("Juni 2006");
      JRadioButton juli = new JRadioButton("Juli 2006");
      JRadioButton august = new JRadioButton("August 2006");
      JRadioButton september = new JRadioButton("September 2006");
      JRadioButton oktober = new JRadioButton("Oktober 2006");
      JRadioButton november = new JRadioButton("November 2006");
      JRadioButton dezember = new JRadioButton("Dezember 2006");
      
      radio.add(april);
      radio.add(mai);
      radio.add(juni);
      radio.add(juli);      
      radio.add(august);
      radio.add(september);
      radio.add(oktober);
      radio.add(november);
      radio.add(dezember);
                
      //Panel für Buttons erzeugen
      JPanel button = new JPanel();
      JButton oeffnen = new JButton("Öffnen");
      JButton schließen = new JButton("Schließen");
      
      button.add(oeffnen);
      button.add(schließen);
   
   	  oeffnen.setBackground(Color.white);
   	  schließen.setBackground(Color.white);
   	  
   	  oeffnen.setPreferredSize(new Dimension(90,20));
   	  schließen.setPreferredSize(new Dimension(90,20));
   	  
   	  
   	  //Panels zum Fenster zufügen
      getContentPane().add(radio,"Center");
      getContentPane().add(button,"South");
      
      //Frame bei Listener anmelden
      addWindowListener(new CDialog());
            
      //Listener für Buttons regisrieren
      schließen.addActionListener(new CClose());
      oeffnen.addActionListener(new COeffnen());
   }
   
}

Bitte nicht wieder wegen dem Code meckern 🙂! Öffenen tue ich das Fenster aus diesem Fenster:

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*; 


final public class CPuls extends JFrame
{
   //Behandlung für das Frame WindowLauscher
    final class CPulsFenster extends WindowAdapter
   {
       final public void windowClosing(WindowEvent e)
      {
         setVisible(false);
      }
   }
   
   //Behandlung für Button Speichern
   final class CSpeichern implements ActionListener 
   {
        final public void actionPerformed(ActionEvent e) 
        {
            try 
            {
                speichern();
            } 
            catch (IOException ex) 
            {
                ex.printStackTrace();
            }
        }
    } 
	
	//Behandlung den Button Schließen
   final class CSchließen implements ActionListener
   {
      final public void actionPerformed(ActionEvent e)
      {
       	setVisible(false);
      }
   }
   
   	//Behandlung den Button Öffnen
   final class COpen implements ActionListener
   {
      final public void actionPerformed(ActionEvent e)
      {
       	CAbfrage Fenster4 = new CAbfrage("Datei öffnen");
      
      	Fenster4.setSize(350,180);
      	Fenster4.show();
      	Fenster4.setLocation(450,125);
      	
      }
   }
   
      
   //Kontruktor legt Schalter und Label an
   CPuls(String titel)
   {
      super(titel);   //Fenstertitel
      
      //layout des Fensters
      getContentPane().setLayout(new BorderLayout());
            
      //Panel für Überschriften erzeugen
      JPanel oben = new JPanel();
      JLabel zeile = new JLabel("Geben Sie hier ihre Daten über Gewicht und Puls ein");
            
      oben.add(zeile);
      
      zeile.setBackground(Color.white);
      zeile.setForeground(Color.blue);
            
      //Panel für textArea erzeugen
      JPanel mitte = new JPanel();
      text = new JTextArea("Hier geben Sie die Daten ein");
      
      try {
            laden();
          } 
          catch (FileNotFoundException ex1) 
          {
          } 
        catch (IOException ex2) 
        {
            ex2.printStackTrace();
        }
    		 
      
      mitte.add(text);
           
      mitte.setBackground(Color.white);
      
                        
      //Panel für Buttons erzeugen
      JPanel button = new JPanel();
      JButton exit = new JButton("Schließen");
      JButton save = new JButton("Speichern");
      JButton open = new JButton("Öffnen");	
      
      button.add(open);
      button.add(save);
      button.add(exit);
      
      exit.setBackground(Color.white);
      save.setBackground(Color.white);
      open.setBackground(Color.white);
      
      exit.setPreferredSize(new Dimension(90,22));
      open.setPreferredSize(new Dimension(90,22));
      save.setPreferredSize(new Dimension(95,22));
      
      //Panels zum Fenster zufügen
      getContentPane().add(oben,"North");
      getContentPane().add(new JScrollPane(text),"Center"); 
      getContentPane().add(button,"South");
      
      //Frame bei Listener anmelden
      addWindowListener(new CPulsFenster());
            
      //Listener für Buttons regisrieren
      save.addActionListener(new CSpeichern());
      exit.addActionListener(new CSchließen());
      open.addActionListener(new COpen());
}
	private void speichern() throws IOException
		{
        Writer writer = new BufferedWriter(new FileWriter(new File(FILE_NAME)));
        text.write(writer);
        writer.close();
    }
    
    private void laden() throws IOException
    	{
        Reader reader = new BufferedReader(new FileReader(new File(FILE_NAME)));
        text.read(reader,null);
        reader.close();
    	}
    
    private final String FILE_NAME = "april.txt";
    
    private JTextArea text ;
}

Im Moment wird mein Text den ich in die TextArea eingebe ja als april.txt gespeichert. Funktioniert alles super!
So nun kommen ja weitere Monate. Jetzt möchte ich, wenn ich in dem Fenster mit den JRadioButtons z.B Mai auswähle, dass sich in dem Fenster wo das TextArea ist ein leeres TextArea öffnet. Wenn ich dann den Button speichern klicke, soll dies unter mai.txt gespeichert werden.

Versteh ihr wie ich das meine?

Ok, ist vielleicht etwas viel. Bedanke mich trotzdem bei euch für Hilfe!
 
timkon hat gesagt.:
Versteh ihr wie ich das meine?

Nö, also ich zumindest nicht. Gewöhne dir bitte an nur den relevanten Code zu posten und dein Problem genauer zu spezifizieren (also z. B. "Was für einen Listener brauche ich für RadioButtons?" "Wie öffne ich ein neues Frame?", ...), dann ist es auch viel einfacher dir zu helfen.
 
Ok, werde ich mir angewöhnen, aber so habt ihr wenigstens einen Überblick 🙂!

Also mal kurz gesagt: Ich möchte einen JRadioButton aktivieren bsp: Mai. dann klicke ich auf öffnen und in dem anderen Fenster soll dann der Inhalt der -txt Datei angezeigt werden die von dem RadioButton marjiert wurde.

Leichter verständlich? Hoffentlich 🙂
 
timkon hat gesagt.:
Ok, werde ich mir angewöhnen, aber so habt ihr wenigstens einen Überblick 🙂!

Überblick schön und gut, aber wenn man das relevante nicht einfach rausfiltern kann, hilft der schönste Überblick nichts 😉

timkon hat gesagt.:
Also mal kurz gesagt: Ich möchte einen JRadioButton aktivieren bsp: Mai. dann klicke ich auf öffnen und in dem anderen Fenster soll dann der Inhalt der -txt Datei angezeigt werden die von dem RadioButton marjiert wurde.

Wobei wir beim Punkt "Die Frage genauer spezifizieren" wären. Hast du Probleme mit

a) (falls der JRadioButton nicht von Hand ausgewählt wird) Den JRadioButton vom Programm aus auswählen
b) Beim Klick das andere Fenster anzeigen
c) Die txt Datei auslesen
d) Die txt Datei anzeigen
e) Feststellen welcher RadioButton ausgewählt ist.

Ich schätze mal es ist entweder b, c oder e. Aber auf gut Glück stell ich hier keine Lösung rein ...
 
🙂 Ist das lustig hier 🙂

Also...

zu a: Wähle ich per Hand aus, also kein Problem
zu b: Wie ich das andere Fenster dann öffne ist eigentlich auch kein Problem
zu c: Die richtige .txt auslesen ist das Problem. Ich möchte ja über den RadioButton mitteilen welche .txt das Programm auslesen soll
zu e: das schließt sich ja dann mit ein. Das Programm muss ja wissen welcher Burron aktiv ist, damit es dann weiß (c) welche .txt es auslesen soll. Richti?? 🙂
naja d. kommt dann eigentlich auch noch, weil ich dann auch die ausgewählte .txt anzeigen muss.
Verständlich? Wir nähern uns langsam 🙂!
 
OK, jetzt kann ich dir helfen. 😉 🙂

1. Am besten addest du deiner Klasse mit den RadioButtons einen ItemListener, welcher sich den aktuell ausgewählten RadioButton merkt (am Besten in ein File die zugehörige txt schreiben und bei einer anderen Selektierung überschreiben).

2. Dieses File übergibst du dann in einer setter Methode (oder Konstruktor je nachdem wie deine Klassen aufgebaut sind) deiner anderen Klasse, welche dann einfach nur einen Reader mit dem File zu erzeugen braucht.

3. Wenn du die Datei ausgelesen hast erzeugst du z. B. ein JTextArea irgendwo wo es dir beliebt ( 😉 ), addest diesem den eingelesenen Text und zeigst es an.

Soviel zur Theorie, Praxis ist jetzt dein Part 🙂
 
danke für die Hilfe.

Deswegen habe ich den kompletten code gepostet. Verstehe zwar was du mir sagst (klingt logisch 🙂) aber ich weiß nicht so richtig wo ich dies alles machen soll, sorry! 🙁

Können wir das mal schritt für schritt durchgehen? Wo erstelle ich den ItemListener? Also in welcher Klasse ist mir klar, aber wo da genau nicht so ganz und auch nicht wie er dann die Auswahl von den Buttons erhält.

Code:
class CMeinItemAdapter implements ItemListener
   {
   	public void itemStateChanged(ItemEvent e)
   	{
   		//was soll hier rein?
   	}
   }
Wie gehts weiter?

Mir ist da grade was eingefallen. Könnte ich nicht auch ein TextField erstellen und in dieses die zu öffnende Datei schreiben?
 
Also um heute alles Schritt für Schritt mit dir durchzugehen habe ich keine Zeit, aber wir können ja mal anfangen (evtl. findet sich ja auch noch jemand anderes, ist ja net hochkompliziert 😉 ).

Eins vorneweg ich werde nichts in deiner Klasse schreiben, da ich mich mit deinen Programmierstiel nicht anfreunden kann, sry!

Hier eine Beispielklasse für den ItemListener

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ItemListenerDemo extends JFrame implements ItemListener {
	
	private String auswahl = null;
	private JPanel pane = null;
	private JRadioButton januar = null;
	private JRadioButton februar = null;
	private JRadioButton maerz = null;
	private ButtonGroup group = null;
	
	public ItemListenerDemo() {
		
		pane = new JPanel();
		januar = new JRadioButton("Januar", true);
		februar = new JRadioButton("Februar");
		maerz = new JRadioButton("März");
		group = new ButtonGroup();
		pane.add(januar);
		pane.add(februar);
		pane.add(maerz);
		group.add(januar);
		group.add(februar);
		group.add(maerz);
		januar.addItemListener(this);
		februar.addItemListener(this);
		maerz.addItemListener(this);
		setContentPane(pane);
		pack();
		setVisible(true);
	}
	
	// Das passiert wenn ein anderer JRadioButton ausgewählt wird
	
	public void itemStateChanged(ItemEvent ite) {
		
		Object source = ite.getSource(); // speichere den ausgewählten JRadioButton in ein Objekt
		if (ite.getStateChange() == ItemEvent.SELECTED) { // nur ausführen wenn der Button selektiert und nicht wenn er abgewählt wird
			if (source == januar) {
				auswahl = "Januar.txt";
			}
			else if (source == februar) {
				auswahl = "Februar.txt";
			}
			else if (source == maerz) {
				auswahl = "März.txt";
			}
			System.out.println("Folgende Datei wird momentan geladen: " + auswahl);
		}
	}
	
	public static void main(String[] args) {
		
		new ItemListenerDemo();
	}
}
 
Also ich habe das jetzt eingebaut und nach meinen dingen angepasst.

jetzt habe ich da ja ne main methode drin. die habe ich doch schon in meinem Hauptfenster. Geht das?

Bekomme jetzt immer die FEhlermeldung, invalid method declaration; return type required
CAbfrage(String titel)

Was mache ich falsch?
 
Du bentötigst pro Programm nur eine main. Wenn du meine Klasse oben aus einer anderen Klasse aus aufrufst kannste dir die main natürlich schenken.

Wenn Fehler kommen immer zeigen WO sie auftauchen. Ich schätze jetzt mal so frei Schnauze dass du deine Klasse unbenannt hast und dabei den Konstruktor vergessen hast mit umzubennen!?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben