OOP Übergabe/Output in Textfield

fLooojava

Bekanntes Mitglied
Hi,

ich programmiere derzeit einen kleinen Passwortgenerator. Die Funktionalität ist vorhanden, jedoch baue ich ihn gerade noch grafisch auf. Leider hänge ich bei der Ausgabe. Kann mir wer sagen, wie ich die Ausgabe in meine Textarea befördere?

Code:

Java:
public class CodeGenerator
{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GUIGen guigen= new GUIGen();
	}

}

Java:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import java.util.Random;


public class CreatePassword
{


	
	
	public void generateRandomCode(int length){
	int i = 1;

	char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray();
	StringBuilder stringbuilder = new StringBuilder();
	Random random = new Random();

	while(i<=length){
	    char c = chars[random.nextInt(chars.length)];
	    stringbuilder.append(c);
		i = i+1;
	}
	
	String code = stringbuilder.toString();
	
	

}


}

Java:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;


public class GUIGen extends JFrame 
{

	private int length;
	public GUIGen ()
	   {
		   JFrame frame = new JFrame("passwordgenerator");
	       frame.setSize(500,200);
	       frame.setLocation(300,300);
	       frame.setResizable(false);
	       frame.setLayout(new FlowLayout(FlowLayout.CENTER));
	       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	       JPanel panel = new JPanel();
	       JLabel lblpw = new JLabel("length of your password : ");
	       JPanel panel1 = new JPanel();

           
	        final JTextField tfieldlength = new JTextField(5);
	        tfieldlength.setColumns(2);
	        JTextField textfield = new JTextField(20);
	        textfield.setEditable(false);
	        
	        CreatePassword create = new CreatePassword();
	        

	        textfield.setText("output");  
	        
	        
	       JButton btngenpw = new JButton("generate pw");
	       
	       panel.add(lblpw);
	       panel.add(tfieldlength);
	    
	       panel.add(btngenpw);
	       panel1.add(textfield);

	       frame.add(panel);
	       frame.add(panel1);
	       frame.setVisible(true);
	       
	       btngenpw.addActionListener (new ActionListener() {
	       
	    
				@Override
				public void actionPerformed(ActionEvent e) {
					// TODO Auto-generated method stub
		            String input = tfieldlength.getText();
		 	        int length = Integer.parseInt(input);
		 	        
		 	        // hier muss das code generieren erfolgen
		 	       CreatePassword createpw= new CreatePassword();
		 		   createpw.generateRandomCode(length);
				}
			
		 });

	       
	       
	   		
	       /// --
	      
	   }
	}

Ich würde gerne hier:
Java:
  textfield.setText("output");
Das generierte Passwort ausgeben, sprich
Java:
textfield.setText(code);
- leider klappt der Zugriff auf diesen String nicht, und mir fehlt hier auch die Idee, wie ich an diesen String komme. Was müsste ich in der CreatePassword Klasse ändern? Kann mir jemand nen Tipp geben?

Wäre cool!

lg
 
Zuletzt bearbeitet:
Hallo fLooojava,

deine Methode generateRandomCode sollte nicht void sondern String, eben das generierte Passwort, zurückgeben.
Diesen String kannst du dann in Zeile 68 an dein [c]textfield[/c] übergeben.
 
Hallo Samuel,

es hat nun geklappt. Vielen dank für deinen Tipp! =)

Java:
textfield.setText(createpw.generateRandomCode(length));

Kannst du mir hier noch sagen ob ich das ganze sauber programmiert habe oder gibt es irgendwo noch Verbesserungsvorschläge? Macht man irgendwas nicht so wie ich es gemacht habe?

Wäre cool! 😉

lg
 
Zuletzt bearbeitet:
Entweder du schreibst einen öffentlichen Getter und speicherst dein Passwort in einer privaten Instanzvariable, oder du machst das Ganze Statisch und nutz diese Methode ohne Instanz des Generators

Hier mal ein Beispiel

Java:
public class PasswordGenerator{

public PasswordGenerator(){}

public static String generatePassword(){

  //..more code 

  return String.valueOf(deinGeneriertesPasswort);
}
}

Diese Methode könntest du folgendermaßen aufrufen und durch den Rückgabetyp String überall dort verwenden wo ein String erwartet wird

Java:
meinTextFeld.setText(PasswordGenerator.generatePassword());

Selbstverständlich kannst du die statische Method dann auch so designen das du einen int Wert übergeben kannst der die länge des Passwortes festlegt
 
Zuletzt bearbeitet:
Hallo kaoZ,

vielen Dank für deinen Beitrag.

Prinzipiell ist doch die Funktionsweise dieselbe die ich momentan bei meinem Programm angewendet habe oder? Was ich aber nicht verstehe, wozu benötige ich folgende Zeile:

Java:
return String.valueOf(deinGeneriertesPasswort);

Wozu benötige ich das valueOf?

Lg
 

Neue Themen


Zurück
Oben