Mehrere Swing und AWT Fragen

  • Themenstarter Themenstarter dummerJunge
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
D

dummerJunge

Gast
Hi!
Ich arbeite gerade an einem Schulprojekt, habe aber einige Fehler.
Hier mal der Code
Code:
import java.awt.*;
import java.awt.event.*; 
import javax.swing.*;

public class Registrieren extends Frame implements ActionListener
{
    JTextField nachname_textfeld, vorname_textfeld, adresse_textfeld, geburtsdatum_textfeld, code_textfeld;
    JButton ok;
    
    Registrieren()
    {
        Frame f3 = new Frame("Registrieren");
        f3.setSize(350,420); 
        f3.setResizable(false);
        f3.setBackground(Color.darkGray);
        
        nachname_textfeld = new JTextField("");
        vorname_textfeld = new JTextField("");
        adresse_textfeld = new JTextField("");
        geburtsdatum_textfeld = new JTextField("");
        code_textfeld = new JTextField("");
        
        ok = new JButton("OK");
        
            nachname_textfeld.setBounds(40,  90,   270,  25); 
             vorname_textfeld.setBounds(40,  150,  270,  25); 
             adresse_textfeld.setBounds(40,  210,  270,  25); 
        geburtsdatum_textfeld.setBounds(40,  270,  270,  25); 
                code_textfeld.setBounds(40,  330,  270,  25); 
        ok.setBounds(150, 370, 60, 30);
                
        nachname_textfeld.setBackground(Color.BLACK);
        nachname_textfeld.setForeground(Color.WHITE);
        vorname_textfeld.setBackground(Color.BLACK);
        vorname_textfeld.setForeground(Color.WHITE);
        adresse_textfeld.setBackground(Color.BLACK);
        adresse_textfeld.setForeground(Color.WHITE);
        geburtsdatum_textfeld.setBackground(Color.BLACK);
        geburtsdatum_textfeld.setForeground(Color.WHITE);
        code_textfeld.setBackground(Color.BLACK);
        code_textfeld.setForeground(Color.WHITE);
        ok.setBackground(new java.awt.Color(0, 128, 0));
        ok.setForeground(Color.WHITE);
        
        ok.addActionListener(this);
        
        f3.add(nachname_textfeld);
        f3.add(vorname_textfeld);
        f3.add(adresse_textfeld);
        f3.add(geburtsdatum_textfeld);
        f3.add(code_textfeld);
        f3.add(ok);
        
        RegistrierenText regText = new RegistrierenText();
        f3.add(regText); 
        
        f3.setVisible(true);
    }
    
    public void actionPerformed(ActionEvent e)
    {
            if(e.getSource()==ok)
            {
            }
    }
    public static void main(String []args)
    {
        new Registrieren().show();
    }
}

Code:
import javax.swing.*;
import java.awt.*;
public class RegistrierenText extends JComponent
{
   public void paintComponent(Graphics g)
   {
       g.setColor(Color.white); 
       
       g.drawString("Nachname:", 38, 59);
       
       g.drawString("Vorname:", 38, 119);
       
       g.drawString("Adresse:", 38, 179);
       
       g.drawString("Geburtsdatum:", 38, 239);
       
       g.drawString("Ihr gewünschter Code (min. 3 Stellen):", 38, 299);
       
       Font ueberschrift = new Font("Arial",Font.ITALIC+Font.BOLD, 16);
       g.setFont(ueberschrift);
       
       g.drawString("Registration:", 38, 30);
   }
}

Jetzt würd ich gern wissen wieso ein weiterer leerer Frame geöffnet wird (Wie kann ich das vermeiden?) und auch wie ich das Fenster "Registrieren" zum schließen bringe wenn ich auf OK drücke (geht mit dispose und hide nicht wirklich)

Bevor ihr mich jetzt fertig mach, ich bin ein absoluter newbie und hab das Forum schon ein paar mal durchsucht nach antworten. Bitte erklärt es deppensicher 😳
 
also das mit den zwei fenstern ist relativ einfach:

als erstes erzeugst du in deiner main eine neue instanz der klasse registrieren (welche von frame erbt) und sagst dann auf dieser instanz show. und das macht er dann auch er zeigt einen leeren frame an. im konstruktor der klasse registrieren legst du nun einen weitere neuen frame an, diesem frame gibst du schön alle komponenten und setzt ihn dann auch auf visible = true und siehe da es werden zwei frames geöffnet.

du solltest in deinem konstruktor keinen neuen frame erzeugen, sondern auf dem bestehenden (this) arbeiten. das setzen von visible ist dann auch nicht mehr notwendig.

zum schliessen solltest du immer auch ein System.exit(0) mit einplanen, sonst läuft die JVM unendlich lange weiter :roll: .

Da ich nicht dein gesamtprojekt kenne kann ich hier keine weiteren hinweise geben, evtl. ist auch dein gesamtansatz der falsche!
 
keine Angst - wir machen dich schon nicht fertig :wink:

zum einen - niemals Swing und AWT mischen... warum ? siehe: http://www.java-forum.org/de/viewtopic.php?t=5113

also entweder eins von beiden !

Was ich nicht versteh ist - du verwendest schöne Klassen für deinen Frame und für elemente deines Frames, dann aber addest du eine Component und zeichnest da alles selber ... wieso ???

der Frame erscheint zwei mal - weil du in der main methode show aufrufst und im Konstruktor nochmal setVisible.. also einfach das show streichen
 
Danke soweit 🙂

Wenn ich mit System.exit(0) arbeite schließt sich aber das ganze das Programm. I will aber nur das der Frame Registration auf Knopfdruckgeschlossen wird.
 
deathbyaclown hat gesagt.:
Was ich nicht versteh ist - du verwendest schöne Klassen für deinen Frame und für elemente deines Frames, dann aber addest du eine Component und zeichnest da alles selber ... wieso ???
Weil ichs nich besser weis :roll:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben