Ein Hauptprogramm mit mehreren Fenstern .

Status
Nicht offen für weitere Antworten.

H3llGhost

Bekanntes Mitglied
Hallo Leute,

wie ihr schon vom Titel erfahrt habe ich vor ein Hauptprogramm zu schreiben.
Aus diesem sollen mehrere Fenster geöffnet werden, welche auch Dialoge beiinhalten.
Das Öffnen von einem Fenster ist nicht mein Problem ...
Wie bekomme ich die Werte die ich in dem geöffneten Fenster in die Textfelder übertragen, wenn ich zum Beispiel auf "OK" klicke?

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

public class SpardoseGUI2 extends JFrame implements ActionListener
{
   private double geld;
   private String zeile = "", zeile2 = "", pfad = "", datein = "", tmp = "";
   private KundenAuslesen ka;
   // Konstruktor, alles was man für die Initialisierung benötigt hier hinein!!
   public SpardoseGUI2()
   {
     try {
       BufferedReader lesen = new BufferedReader(new FileReader("config.ini"));
        while ((zeile = lesen.readLine()) !=null) {
          if (zeile.contains("pfad")) {
           pfad = zeile.replace("pfad=" , "");
          }
          if (zeile.contains("datein")) {
           datein = zeile.replace("datein=" , "");
          }
        }
      }catch(Exception f){
        System.out.println("Fehler: " +f);
      }
     if ((pfad == "") || (datein == ""))
     {
      if (pfad == "") System.out.println("pfad fehlt");
      if (datein == "") System.out.println("dateinamem fehlt");
      System.exit(0);
     } else
     {
      System.out.println("Config erfolgreich ausgelesen ...");
     }

     ka = new KundenAuslesen(pfad+"\\"+datein);
     Person[] personen = ka.auslesen();

     geld = 100;
   }
   public static void main(String args[])
   {
     SpardoseGUI2 fe = new SpardoseGUI2();
     Abfrage ab = new Abfrage();
     //ab.user.getText();
     //ab.removeNotify();
     //Start st = new Start();
   }
   public void actionPerformed(ActionEvent evt)
   {
     Object quelle = evt.getSource();

   }

   public void beenden() {
     System.exit(0);
   }
}

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

class Abfrage extends JFrame implements ActionListener {
   private JButton bestaetigenButton, exitButton;
   private JTextField user, pw;
   private String usert, pwt;
   private JPanel einPanel;
   private Abfrage ab;

   public Abfrage() {
     setTitle("Login-Daten");
     setSize(300, 200); // Größe des Rahmens in Pixel
     setDefaultCloseOperation(EXIT_ON_CLOSE); // Schließt den Rahmen

     new Font("MS Sans Serif", Font.PLAIN, 12);

     einPanel = new JPanel();  // Erzeugung der "Leinwand" für die Komponenten
     einPanel.setLayout(null); // Keinen Layoutmanager verwenden
     einPanel.setBackground(Color.GRAY);

     user = new JTextField("", 10);
     user.setDocument(new NegativeDoubleDocument());
     user.setEditable(true);
     user.setText("");
     user.setToolTipText("Hier ist ihr aktueller user!");
     user.setBounds(49, 50, 100, 30);
     
     pw = new JTextField("", 10);
     pw.setDocument(new NegativeDoubleDocument());
     pw.setEditable(true);
     pw.setText("");
     pw.setToolTipText("Hier ist ihr aktueller user!");
     pw.setBounds(151, 50, 100, 30);

     bestaetigenButton = new JButton("OK");  // Erzeugung des Buttons
     bestaetigenButton.setBounds(49, 100, 100, 30);
     bestaetigenButton.setToolTipText("Klicke hier zum Berechnen!");
     bestaetigenButton.addActionListener(this);

     exitButton = new JButton("Abbrechen");  // Erzeugung des Buttons
     exitButton.setBounds(151, 100, 100, 30);
     exitButton.setToolTipText("Klicke hier zum Beenden!");
     exitButton.addActionListener(this);

     einPanel.add(user);
     einPanel.add(pw);
     einPanel.add(bestaetigenButton);           // den Button auf die "Leinwand" packen
     einPanel.add(exitButton);           // den Button auf die "Leinwand" packen

     // ganz zum Schluss!!
     add(einPanel);
     setVisible(true); // Zum Schluss das ganze sichtbar machen
     setResizable(false);
   }
   public void beenden() {
     ab.removeNotify();
   }
   public String getUser() {
     return user.getText();
   }
   public String getPw() {
     return pw.getText();
   }
   public void actionPerformed(ActionEvent evt)
   {
     Object quelle = evt.getSource();
     if (quelle == bestaetigenButton)
     {
       System.out.println(user.getText());
     }
     if (quelle == exitButton)
     {
       System.exit(0);
     }
   }
   public static void main(String args[])
   {
     Abfrage ab = new Abfrage();
   }
}
 
indem du get und setMethoden für sie anlegst und darüber aus deiner anderen Klasse drauf zugreifst.

Die get Methoden hast du ja schon teilweise drin stehen. Da fehlt dann nur noch ein:

Code:
String user = ab.getUser();

edit: Dein actionPerformed wird so auch nicht funktionieren (Objekte vergleicht man nicht mit == sondern mit equals), sollte ungefähr so aussehen:

Code:
public void actionPerformed(ActionEvent evt) {
		   if(evt.getSource() instanceof JButton) {
			   JButton button= (JButton) evt.getSource();
			   if(button.equals(bestaetigenButton)) {
				   System.out.println(user.getText()); 
			   } else if(button.equals(exitButton)) {
				   System.exit(0);
			   }
		   }
	   }
 
Danke für den Tipp mit den Get und Set, die habe ich nun umgesetzt.

Wegen den Buttons und dem ActionListener werde ich so an meinen Lehrer weitergeben ... ;-)

Ich hatte mir gedacht, es vielleicht so zu verbinden:
Code:
[...]
     if (quelle == bestaetigenButton)
     {
       System.out.println(user.getText());
       SpardoseGUI2.exit1();
     }
[...]

und

Code:
[...]
   public void exit1() {
     System.out.println(ab.getUser());
     ab.removeNotify();
   }
[...]

aber das funktioniert nicht! :-(

Weil wenn ich mit OK bestätige soll er im Hauptprogramm weiter machen und dann das "Hauptfenster" öffnen.
Also auf gut Deutsch es soll ein Loginformular geben und ein Hauptaktionsfenster.
 
Joker hat gesagt.:
edit: Dein actionPerformed wird so auch nicht funktionieren (Objekte vergleicht man nicht mit == sondern mit equals), sollte ungefähr so aussehen:

Code:
public void actionPerformed(ActionEvent evt) {
		   if(evt.getSource() instanceof JButton) {
			   JButton button= (JButton) evt.getSource();
			   if(button.equals(bestaetigenButton)) {
				   System.out.println(user.getText()); 
			   } else if(button.equals(exitButton)) {
				   System.exit(0);
			   }
		   }
	   }

Kann man so nicht sagen. In dem Fall wirds es funktionieren. == testet ob es sich dieselben Objekte handelt, was in dem Fall so ist. equals() macht in seiner Standardimplementierung nichts anderes; trotzdem ist equals natürlich vorzuziehen.
 
er versucht allerdings ein Object mit einem JButton zu vergleichen und das wird so nie funktionieren, == vs equals war ja eine Zusatzinfo deshalb auch die Klammern 😉

@H3llGhost: mit deinem actionPerformed wird er nie in die If Verzweigung gelangen und deshalb beim Knopfdruck einfach überhaupt nichts tun. Dazu kommt das removeNotify eine AWT Methode ist, was du suchst ist setVisible (siehe http://72.5.124.55/j2se/1.4.2/docs/api/java/awt/Component.html#setVisible(boolean) )
 
Joker hat gesagt.:
er versucht allerdings ein Object mit einem JButton zu vergleichen und das wird so nie funktionieren, == vs equals war ja eine Zusatzinfo deshalb auch die Klammern 😉

@H3llGhost: mit deinem actionPerformed wird er nie in die If Verzweigung gelangen und deshalb beim Knopfdruck einfach überhaupt nichts tun.

Code:
public void actionPerformed(ActionEvent evt)
   {
     Object quelle = evt.getSource();
     if (quelle == bestaetigenButton)
     {
       System.out.println(user.getText());
     }
     if (quelle == exitButton)
     {
       System.exit(0);
     }
   }

Ich muss nochmal drauf eingehen, auch wenn wir uns eigentlich einig sind dass man equals benutzt; das stimmt so einfach nicht, dass er nicht in die If-Verzweigung gelangt. Es funktioniert hier auch so. Auch wenn er das in Object quelle speichert, ist evt.getSource() ein JButton, daher auch quelle ein JButton und zwar genau der gleiche wie entweder bestaetigenButton) oder exitButton.
 
Joker hat gesagt.:
[...]
@H3llGhost: mit deinem actionPerformed wird er nie in die If Verzweigung gelangen und deshalb beim Knopfdruck einfach überhaupt nichts tun. Dazu kommt das removeNotify eine AWT Methode ist, was du suchst ist setVisible (siehe http://72.5.124.55/j2se/1.4.2/docs/api/java/awt/Component.html#setVisible(boolean) )

Heißt das auf gut Deutsch ich lasse am Anfang erstmal alle Fenster erstellen und dann setze ich die nach und nach auf sichtbar bzw. nicht sichtbar?
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben