tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
4255
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    MRS MRS ist offline Mitglied
    Registriert seit
    Jul 2004
    Beiträge
    24
    Hallo zusammen.
    Ich habe erste seit kurzem angefangen mit Java zu programmieren und bin wohl daher auch noch ein wenig beschränkt in meiner Erfahrung. Daher wäre es echt nett wenn Ihr mir (wenn es geht) einige Beispiele zeigen würdet wie es richtig funktioniert.

    Zu meinem Programm...
    Ich habe ein Programm mit dem ich eine Passwort Anmeldung machen will und bei richtiger Anmeldung soll das Anmelde Fenster geschlossen werden und das Hauptprogramm Fenster geöffnet werden.

    Meine Probleme sind folgende...
    1. alles was ich in der paint-Methode schreibe ist nicht sichtbar.
    2. ich habe irhgendwie probleme die Variablen richtig zu deklarieren. müssen die final sein? und wenn die final sind habe ich probleme mit der pass Variable.
    3. wenn das Passwort richtig ist soll das Hauptprogramm gestartet werden.... Nur das mir das Hauptprogramm immer mit der Anmeldung startet.(Bin wohl immer noch zu tief in C Gedanken wo sich eins nach dem anderen ab arbeitet.)

    Warum? Was müsste ich ändern?
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    
    // ---------------- Passwortabfrage ----------------------
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    class PassAbf extends JFrame
    {
        public static void PAbfrage()
        {
            int zaehler=0;
            String pass = new String();
            String user = new String();
            String userOK="AAA", passOK="111";
            final JFrame fenster1 = new JFrame("Anmeldung");
    //      ----------------------- Passwort Fenster ---------------------
            fenster1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            fenster1.setIconImage(Bilder.mainicon);
            fenster1.setBackground(new Color(200,200,255));
            fenster1.setSize(400,200);
            fenster1.setLayout(null);    
            Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
            fenster1.setLocation((d.width-fenster1.getSize().width)/2,(d.height-fenster1.getSize().height)/2);
            fenster1.setResizable(false);
            fenster1.setVisible(true);
            
            final JTextField username = new JTextField("");
            username.setBounds(120,50,220,26);
            fenster1.add(username);
            
            final JPasswordField password = new JPasswordField("");
            password.setEchoChar('~');
            password.setBounds(120,100,220,26);
            fenster1.add(password);
            
            JButton okPassAbf = new JButton("OK");
            ActionListener okPass = new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    user=username.getText();
                    pass=password.getText();
                    zaehler++;
                    
                    System.out.println("versuch: "+zaehler);
                    System.out.println("username: "+user);
                    System.out.println("passwort: "+pass);
                    
                    if(user.equals(userOK) && pass.equals(passOK)){System.out.println("OKOK"); fenster1.dispose();};
                    if(zaehler==3)System.exit(0);               
                }
            };
            okPassAbf.addActionListener(okPass);
            okPassAbf.setBounds(50,140,100,20);
            fenster1.add(okPassAbf);
            JButton endePassAbf = new JButton("Beenden");
            endePassAbf.addActionListener(Action.schliesser);
            endePassAbf.setBounds(250,140,100,20);
            fenster1.add(endePassAbf);
        }
     
        public void paint(Graphics g)
        {      
            g.setColor(new Color(2,2,2));
            g.setFont(new Font("Arial", Font.BOLD, 20));
            g.drawString("Anmeldung", 140, 55);
            g.setFont(new Font("Arial", Font.BOLD, 14));
            g.drawString("Username:", 30, 95);
            g.drawString("Passwort:", 35, 145);
            super.update(g);
        }
    }

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    import javax.swing.*;
     
    public class Start 
    {
        public static void main( String[] args )
        {
            PassAbf.PAbfrage();                   // <------ Passwortabfrage Fenster
            Arbeitsflaeche.Hauptprogramm(); // <------ Hauptprogramm Fenster
        }
    }

    Vielen Dank schon mal!
    Geändert von MRS (16.04.06 um 17:18 Uhr)
     
    Ich kann zwar nicht alles, aber alles probieren!

  2. #2
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Hallo M(a)R(ku)S,

    1. Die Variablen und Objekte solltest du außerhalb, deiner Methode definieren. Da der ActionListener eine Innere Klasse ist, kannst du darin auf Methodenvariablen nicht zugreifen. Sind die Variablen und Objekte außerhalb der Methode definiert, besteht kein Problem.

    2. Die Methode PAbfrage() sollte lieber nicht statisch sein, da sonst alle Variablen die darin genutzt werden ebenfalls statisch deklariert werden müssten, und es dem sind des OOP widerspricht.

    3. Du hast einmal mit "extends JFrame" von JFrame abgeleitet aber auch ein weiteres JFrame mit fenseter1 erzeugt. Die Komponenten addest du auf fenster1, zeigst mit setvisible() diesen an, jedoch zeichnen tust du auf das andere JFrame das nicht angezeigt wird.


    Vg Erdal
     

  3. #3
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Hallo MRS,

    was ich noch vergessen habe.

    4. Beschriftungen für Textfelder und ähnlich zeichnet man für gewöhnlich nicht, dafür gibt es die Klasse JLabel.

    Ich würde dir wärmstens empfehlen, das eine oder andere Kapitel hier durchzulesen:
    http://www.galileocomputing.de/openbook/javainsel5/

    Dieses Buch führt dich Schritt für Schritt durch die verschiedenen Stationen des Programmierens anhand vielen schönen Beispielen.


    Vg Erdal
     

  4. #4
    MRS MRS ist offline Mitglied
    Registriert seit
    Jul 2004
    Beiträge
    24
    Hmmm....
    Also das mit dem JPanel habe ich hingekriegt.
    Nur bei den anderen Sachen komm ich nicht so weiter.
    Könntest du mir vielleicht ein Beipiel geben?



    Edit: Das mit dem M(a)R(ku)S... da liegste leider falsch
     
    Ich kann zwar nicht alles, aber alles probieren!

  5. #5
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Hallo MRS (<- englisch Anrede für Frau, du bist eine Frau ),

    ich hatte mal etwas langeweile! So würde das ein etwas forgeschrittener Programmierer implementieren.

    Enthalten sind Beispiele für die Verwendung von ...
    - Layout
    - Thread
    - Objekten
    - Swing (JLabel, JOptionPane...)
    - Array
    - Listener

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    import java.awt.Font;
    import java.awt.Graphics;
     
    import javax.swing.JFrame;
     
    public class ApplicationMain extends JFrame {
     
        public ApplicationMain() {
            super("Hauptprogramm");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setLocationByPlatform(true);
            this.setSize(600, 400);
        }
     
        public void showMainApplication() {
            this.setVisible(true);
        }
     
        public static void main(String[] args) {
            ApplicationMain main = new ApplicationMain();
            PassWordDialog pwd = new PassWordDialog();
     
            if (pwd.showPassWordDialog())
                main.showMainApplication();
            else
                System.exit(0);
        }
     
        public void paint(Graphics g) {
            super.paint(g);
            g.setFont(new Font("Arial",Font.BOLD,32));
            g.drawString("Willkommen im Hauptprogramm" , 50, this
                    .getHeight() / 4);
            
        }
     
    }

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Arrays;
     
    import javax.swing.*;
     
    public class PassWordDialog extends JDialog implements ActionListener {
     
        private JLabel l1 = new JLabel("Bitte geben Sie ihre Benutzerdaten ein.");
     
        private JLabel l2 = new JLabel("Benutzername:");
     
        private JLabel l3 = new JLabel("Passwort:");
     
        private JButton b1 = new JButton("Ok");
     
        private JButton b2 = new JButton("Abbrechen");
     
        private JTextField t1 = new JTextField();
     
        private JPasswordField t2 = new JPasswordField();
     
        private JPanel p1 = new JPanel();
     
        private JPanel p2 = new JPanel();
     
        private String[] registeredUser = { "Klaus", "Peter", "Hans" };
     
        private String[] passWords = { "1111", "2222", "3333" };
     
        private boolean finish = false;
     
        private boolean validAccount = false;
     
        private String message1 = "Bitte tragen Sie Ihren Benutzernamen und Ihr Passwort ein!";
     
        private String message2 = "Benutzername und/oder Passwort falsch!";
     
        public PassWordDialog() {
            super(new JFrame(), "Anmeldung", true);
            this.setLayout(new GridBagLayout());
            this.setSize(400, 250);
            this.setLocationByPlatform(true);
            this.setAlwaysOnTop(true);
     
            p2.setLayout(new GridLayout(1, 2));
            p2.add(b1);
            p2.add(b2);
     
            GridBagConstraints gc = new GridBagConstraints();
            gc.weightx = 1;
            gc.weighty = 1;
            gc.insets = new Insets(5, 10, 5, 10);
     
            gc.anchor = GridBagConstraints.WEST;
            gc.fill = GridBagConstraints.NONE;
            gc.gridx = 0;
            gc.gridy = 0;
            gc.gridwidth = 2;
            gc.gridheight = 1;
            this.add(l1, gc);
     
            gc.anchor = GridBagConstraints.WEST;
            gc.fill = GridBagConstraints.HORIZONTAL;
            gc.weightx = 0;
            gc.gridy = 1;
            gc.gridwidth = 1;
            this.add(l2, gc);
     
            gc.weightx = 1;
            gc.gridx = 1;
            this.add(t1, gc);
     
            gc.weightx = 0;
            gc.gridx = 0;
            gc.gridy = 2;
            this.add(l3, gc);
     
            gc.weightx = 1;
            gc.gridx = 1;
            this.add(t2, gc);
     
            gc.weightx = 1;
            gc.gridx = 0;
            gc.gridy = 3;
            gc.gridwidth = 2;
            this.add(new JSeparator(), gc);
     
            gc.anchor = GridBagConstraints.EAST;
            gc.fill = GridBagConstraints.NONE;
            gc.gridy = 4;
            this.add(p2, gc);
     
            b1.addActionListener(this);
            b2.addActionListener(this);
        }
     
        public boolean showPassWordDialog() {
            new Thread() {
                public void run() {
                    PassWordDialog.this.setVisible(true);
                }
            }.start();
     
            while (!finish) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
     
            try {
                return validAccount;
            } finally {
                this.dispose();
            }
        }
     
        public void actionPerformed(ActionEvent e) {
            if (e.getActionCommand().equals("Ok")) {
                if (!t1.getText().equals("")
                        & !new String(t2.getPassword()).equals("")) {
                    int user = Arrays.asList(registeredUser).indexOf(t1.getText());
                    if (user != -1
                            && passWords[user].equals(new String(t2.getPassword()))) {
                        finish = true;
                        validAccount = true;
                    } else
                        JOptionPane.showMessageDialog(this, message2,
                                "Eingabe fehlerhaft!", JOptionPane.ERROR_MESSAGE);
                } else
                    JOptionPane.showMessageDialog(this, message1,
                            "Eingabe unvollständig!", JOptionPane.WARNING_MESSAGE);
            } else {
                finish = true;
                validAccount = false;
            }
            t1.setText("");
            t2.setText("");
            t1.requestFocus();
        }
    }


    Vg Erdal
     

  6. #6
    MRS MRS ist offline Mitglied
    Registriert seit
    Jul 2004
    Beiträge
    24
    umpf!

    Da muss ich mich jetzt mal durchschlagen.... sieht aber gut aus

    Vielen Dank. werde die nacht mal drüber braten. Morgen ist ja frei *freu*

    Ne..... ne Frau bin ich auch nicht
    Mit dem Namen hast du da garnicht so verkehrt gelegen. Aber nicht ganz
     
    Ich kann zwar nicht alles, aber alles probieren!

  7. #7
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Hallo Marcus vs. Marcellus. vs. Marinus vs. Marius vs. Maurus vs. Morris ,

    das Onlinebuch "Java ist auch eine Insel" nicht vergessen. Immer wenn dir was unklar ist, einfach nachschlagen, hat ein sehr gutes Inhaltsverzeichnis.

    Beispiel: JOptionePane
    http://www.galileocomputing.de/openb...0005521F033100

    Beispiel: GridBagLayout
    http://www.galileocomputing.de/openb...0005411F04D1F9

    Beispiel: paint
    http://www.galileocomputing.de/openb...0004CA1F02A100

    Beispiel: Thread
    http://www.galileocomputing.de/openb...0002C41F02A100


    Würde die genannten und andere notwendigen Kapitel bzw. Unterkapitel einwenig überfliegen, und die Beispiele ausprobieren. Du wirst jede Komponente oder Technik besser verstehen, wenn du sie getrennt betrachtest.


    Vg Erdal
     

  8. #8
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Hallo MRS,

    schau dir auch mal das JXLoginDialog von SwingLabs an. Sieht a bissel besser aus als meins. Und es bietet auch mehr Funktionen und Möglichkeiten.

    http://swinglabs.org/screenshots.jsp

    Einfach nur mal so als weitere Info, was es in der Javawelt von der Spezies Logindialogs existiert .


    Vg Erdal
     

  9. #9
    MRS MRS ist offline Mitglied
    Registriert seit
    Jul 2004
    Beiträge
    24
    Hey Danke!
    Hab die Nacht nen bisschen rumgewuselt....
    allerdings hab ich je später es wurde mehr durcheinander gebracht.

    Setze mich jetzt nochmal hin und probier nen bisschen rum.
    Melde mich aber auf jeden Fall nochmal.
     
    Ich kann zwar nicht alles, aber alles probieren!

  10. #10
    MRS MRS ist offline Mitglied
    Registriert seit
    Jul 2004
    Beiträge
    24
    Du flashray....
    Erstmal zu der JXLoginDialog... sieht super aus aber deine find ich besser. Da verstehe ich wenigstens noch was (ist nämlich auch super).
    Und www.galileocomputing.de ist meine neue Freizeitbeschäftigung geworden.


    Aber ein zwei Sachen find ich immer noch nicht ganz raus.
    Warum kriege ich die hintergrund Farbe eigentlich nicht geändert?
    Ich habe bei dir mal " this.setBackground(new Color(22,222,22)); " eingefühgt.
    Die Farbe die sein soll flacker kurz auf aber wird dann sofort wieder überdeckt.

    Jetzt habe ich gelesen das ich die Update-Methode überschreiben soll.....
    Huh?!
    Stimmt das, damit ich ne andere Hintergrundfarbe kriege?

    Achso... wäre, wenn ich Bilder in die Buttons setzten will " JButton( String text, Icon icon ) " das richtige?
     
    Ich kann zwar nicht alles, aber alles probieren!

  11. #11
    flashray flashray ist offline Mitglied Rubin
    Registriert seit
    Sep 2005
    Ort
    Mannheim
    Beiträge
    1.325
    Hallo MRS,

    das mit dem setBackground klappt deswegen nicht, da ein JFrame (Swing) aus mehreren Komponenten besteht. Bei einem Frame (AWT) hingegen würde man direkt auf das Frame zeichnen. Um die Hintergrundfarbe eines JFrames zu ändern holt man sich erst das Contentpane mit getContentPane() und zeichnet da drauf mit setBackground().

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    import java.awt.BorderLayout;
    import java.awt.Color;
     
    import javax.swing.*;
     
    public class SetBackgroundExample extends JFrame {
     
        public SetBackgroundExample() {
            super("SetBackgroundExample");
            this.setSize(300, 400);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setLocationByPlatform(true);
     
            this.getContentPane().setBackground(new Color(22, 222, 22));
     
            this.add(new JLabel("Label", new ImageIcon("b1.jpg"), JLabel.LEADING),
                    BorderLayout.NORTH);
            this.add(new JButton("Button", new ImageIcon("b2.jpg")),
                    BorderLayout.SOUTH);
     
            this.setVisible(true);
        }
     
        public static void main(String[] args) {
            new SetBackgroundExample();
        }
    }


    Vg Erdal
     

  12. #12
    MRS MRS ist offline Mitglied
    Registriert seit
    Jul 2004
    Beiträge
    24
    Nicht schlecht!
    super.


    Vielen Dank. Marco
     
    Ich kann zwar nicht alles, aber alles probieren!

Ähnliche Themen

  1. Aus einem JFrame anderes JFrame starten
    Von maddos im Forum Java
    Antworten: 3
    Letzter Beitrag: 09.08.07, 12:24
  2. Neues JFrame ueber altem?!
    Von DeadMatt im Forum Java
    Antworten: 5
    Letzter Beitrag: 07.07.06, 23:23
  3. Ein JFrame aus einem anderem JFrame aufrufen!
    Von Lautsprecher im Forum Java
    Antworten: 1
    Letzter Beitrag: 14.11.05, 09:37
  4. Antworten: 2
    Letzter Beitrag: 07.09.05, 12:16
  5. Frage zur Paint-Methode und zu JFrame
    Von dapor im Forum Java
    Antworten: 8
    Letzter Beitrag: 01.02.05, 08:48