ERLEDIGT
NEIN
NEIN
ANTWORTEN
11
11
ZUGRIFFE
4255
4255
EMPFEHLEN
-
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!
-
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
-
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
-
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!
-
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
-
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 ganzIch kann zwar nicht alles, aber alles probieren!
-
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
-
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
-
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!
-
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!
-
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
-
Nicht schlecht!
super.
Vielen Dank. MarcoIch kann zwar nicht alles, aber alles probieren!
Ähnliche Themen
-
Aus einem JFrame anderes JFrame starten
Von maddos im Forum JavaAntworten: 3Letzter Beitrag: 09.08.07, 12:24 -
Neues JFrame ueber altem?!
Von DeadMatt im Forum JavaAntworten: 5Letzter Beitrag: 07.07.06, 23:23 -
Ein JFrame aus einem anderem JFrame aufrufen!
Von Lautsprecher im Forum JavaAntworten: 1Letzter Beitrag: 14.11.05, 09:37 -
JFrame sperren oder neuen JFrame modal darstellen
Von Scrapy im Forum JavaAntworten: 2Letzter Beitrag: 07.09.05, 12:16 -
Frage zur Paint-Methode und zu JFrame
Von dapor im Forum JavaAntworten: 8Letzter Beitrag: 01.02.05, 08:48





Zitieren
Login





