wie bekomm ich ein private attribut aus einer andren klasse?

Status
Nicht offen für weitere Antworten.

megachucky

Bekanntes Mitglied
steh grad etwas aufm schlauch :)

folgendes problem:


habe ein Loginwindow. dieses setzt bei richtiger eingabe das attribut isAccessAllowed von false auf true.

daraufhin möchte ich in meiner anderen klasse DatenbankConnection den button ConnectToDatabaseButton auf setEnabled(true) stellen.

nun wollte ich es zuerst so machen:

Code:
if ( LoginWindow.getIsAccessAllowed() == true )
{
loginButton.setEnabled(true);
}

aber das geht ja nicht, da die methode nicht static ist. aber wenn ich sie static mache, kann sie keinen wert mehr "returnen".

wie löse ich nun dieses problem?
normal müsste man ja dann in der klasse DatenbankConnection ein neues LoginWindow objekt lw erzeugen,
und dann lw.isAccessAllowed aufrufen. aber das ist doch sicher nicht richtig bzw sinnvoll, oder?
 
R

Roar

Gast
*chucky* hat gesagt.:
normal müsste man ja dann in der klasse DatenbankConnection ein neues LoginWindow objekt lw erzeugen,
und dann lw.isAccessAllowed aufrufen. aber das ist doch sicher nicht richtig bzw sinnvoll, oder?

was ist daran denn nicht sinnvoll? das ist der sinn von OOP...
Ich würd eher sagen die ganze LoginWindow statisch zu machen steht im gegensatz zu OOP...
 

L-ectron-X

Gesperrter Benutzer
Ein privates Feld, (hier) also eine Instanzvariable kannst Du Dir mit einer Methode zurückgeben lassen, die Du auf dem Objekt aufrufst. Im Allgemeinen nennt man diese set- und get-Methoden.
 

megachucky

Bekanntes Mitglied
was ist daran denn nicht sinnvoll? das ist der sinn von OOP...

ja, das ist schon richtig, hab ich eigentlich hoffe ich auch schon verstanden.

ich poste unten nun trotzdem mal den code, mir ist irgendwie nicht ganz klar, wie ich das jetzt mit einer getter-methode machen soll, wie l-etron-x meint.
oder falls ich es doch mit "new LoginWindow()" machen soll, wie genau mache ich das hier? ich kann das ja nicht im konstruktor machen, da der ja nicht immer wieder aufgerufen wird, sondern nur am anfang, oder?!?
oder muss ich es mit ner while-schleife machen?

ich glaub ich brauch jetzt mal ne pause, kann irgendwie nicht mehr klar denken :) aber ich hoffe ich krieg trotzdem noch
nen lösungsvorschlag :) thx


Code:
/*
 * Created on 26.11.2004
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package client;

//import server.ClientServer;

//import javax.swing.*;
//import java.awt.*;
//import java.awt.event.*;

import java.awt.Container;
import java.awt.FlowLayout;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

/**
 * @author CHUCKY
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * Creates the Start Window of the Programm.
 */
public class StartWindow extends JFrame implements ActionListener
{
	
	//Buttons
	private JButton dataBaseConnectionButton;
	private JButton exitButton;
	private JButton loginButton;
	
	//Menubar
	private JMenuBar menubar;
	
	//Menues
	private JMenu fileMenu;
	private JMenu infoMenu;
	
	//MenuItems
	private JMenuItem exitMenuItem;
	private JMenuItem infoMenuItem;
	private JMenuItem loginMenuItem;
	
	/**
	 * Creates a new StartWindow-Object.
	 */
	public StartWindow()
	{
		JFrame sw = new JFrame("StartWindow");
		
		
		
		Container cp = sw.getContentPane();
		cp.setLayout(new FlowLayout());
		
		// create and add MenuBar
		menubar = new JMenuBar();

		
		// create Menus
		fileMenu = new JMenu("File");
		infoMenu = new JMenu("Info");
		
		// add Menues to MenuBar
		menubar.add(fileMenu);
		menubar.add(infoMenu);
		
		//create MenuItems
		loginMenuItem = new JMenuItem("Login");
		exitMenuItem = new JMenuItem("Exit");
		infoMenuItem = new JMenuItem("Info");
		
		// add MenuItems to Menus
		fileMenu.add(loginMenuItem);
		fileMenu.add(exitMenuItem);
		infoMenu.add(infoMenuItem);
		
		sw.setJMenuBar(menubar);
		
		// create Buttons
		dataBaseConnectionButton = new JButton("DataBaseConnection");
		exitButton = new JButton("Exit");
		loginButton = new JButton("Login");
		
		//enable / disable Buttons
		dataBaseConnectionButton.setEnabled(false);
		
		// add Buttons to ContentPane
		cp.add(dataBaseConnectionButton);
		cp.add(exitButton);
		cp.add(loginButton);
		
		// set ActionCommands on MenuItems
		exitMenuItem.setActionCommand("exit");
		infoMenuItem.setActionCommand("info");
		loginMenuItem.setActionCommand("login");
		
		// set ActionCommands on Buttons
		dataBaseConnectionButton.setActionCommand("databaseconnection");
		exitButton.setActionCommand("exit");
		loginButton.setActionCommand("login");
		
		// ActionListener methods
		exitMenuItem.addActionListener(this);
		infoMenuItem.addActionListener(this);
		loginMenuItem.addActionListener(this);
		
		dataBaseConnectionButton.addActionListener(this);
		exitButton.addActionListener(this);
		loginButton.addActionListener(this);
			
		//other properties for the StartWindow
		sw.setSize(500, 300);
		sw.setVisible(true);
		sw.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
	
	public void actionPerformed(ActionEvent evt)
	{
		
		if (evt.getActionCommand().equals("exit"))
		{
			System.out.println("Programm ended");
			System.exit(0);
			}
		
		if (evt.getActionCommand().equals("databaseconnection"))
		{
			System.out.println("DataBase Connection is in progress");
			server.DataBaseStuff.connectToDataBase();
		}
		
		if (evt.getActionCommand().equals("info"))
		{
			System.out.println("informations");
			InfoWindow iw = new InfoWindow();
		}
		
		if (evt.getActionCommand().equals("login"))
		{
			System.out.println("login window opened");
			LoginWindow lw = new LoginWindow();
		}
	}
	
	
	
}

Code:
/*
 * Created on 27.11.2004
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package client;

import java.awt.Container;
import java.awt.FlowLayout;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;


/**
 * @author CHUCKY
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * Login to enter the main programm.
 */
public class LoginWindow extends JOptionPane implements ActionListener
{
	private JButton loginButton;
	private JButton cancelButton;
	private JLabel nameLabel;
	private JLabel passwordLabel;
	private JTextField nameTextField;
	private JTextField passwordTextField;
	
	private String[] names = { "kai", "gaby", "hans" };
	private String[] passwords = { "a", "b", "c" };
	
	private static boolean isAccessAllowed = false;
	private boolean isNameCorrect = false;
	private boolean isPasswordCorrect = false;
	
	/**
	 * Creates the Login Window.
	 *
	 */
	public LoginWindow()
	{
		
		JFrame iw = new JFrame("Login Window");
		
		Container cp = iw.getContentPane();
		cp.setLayout(new FlowLayout());
		
		nameLabel = new JLabel("Enter Name: ");
		passwordLabel = new JLabel("Enter Password");
		nameTextField = new JTextField(30);
		passwordTextField = new JTextField(30);
		
		cp.add(nameLabel);
		cp.add(nameTextField);
		cp.add(passwordLabel);
		cp.add(passwordTextField);
		
		nameTextField.addActionListener(this);
		passwordTextField.addActionListener(this);
		
		nameTextField.setActionCommand("name");
		passwordTextField.setActionCommand("password");
		
		loginButton = new JButton("Login");
		cancelButton = new JButton("Cancel");
		
		loginButton.addActionListener(this);
		cancelButton.addActionListener(this);
		
		loginButton.setActionCommand("login");
		cancelButton.setActionCommand("cancel");
		
		cp.add(loginButton);
		cp.add(cancelButton);
		
		iw.setSize(400, 200);
		iw.setVisible(true);
		iw.setResizable(false);
		//iw.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
	}
	
	public void actionPerformed(ActionEvent evt)
	{
		if ( evt.getActionCommand().equals("name") )
		{
			for (int i=0; i<names.length; i++)
			{
				if ( ! names[i].equals(nameTextField.getText()) )
				{
					//System.out.println("name incorrect");
				}
				else
				{
					System.out.println("name correct");
					isNameCorrect = true;
				}
			}
			
		}
		
		if ( evt.getActionCommand().equals("password") )
		{
			for (int i=0; i<passwords.length; i++)
			{
				if ( ! passwords[i].equals(passwordTextField.getText()) )
				{
					//System.out.println("password incorrect");
				}
				else
				{
					System.out.println("password correct");
					isPasswordCorrect = true;
				}
			}
		}
		
		if ( evt.getActionCommand().equals("login") )
		{
			if ( (isNameCorrect == true) && (isPasswordCorrect == true) )
			{
				System.out.println("Access allowed");
				isAccessAllowed = true;
			}
			else
			{
				System.out.println("Access denied. Name and / or Password wrong");
			}
		}
		
		if (evt.getActionCommand().equals("cancel") )
		{
			System.out.println("Login canceled");
		}
	}
	
}
 

L-ectron-X

Gesperrter Benutzer
Code:
public class LoginWindow extends ... {
  private boolean isAccessAllowed = false;
  private StartWindow owner;
  ...
  ...
  ...

  public LoginWindow(StartWindow owner) {
  ...
    this.owner = owner;
  }

  public void actionPerformed(ActionEvent e) {
  ...
    owner.checkLogin();
  }

  public boolean getIsAccessAllowed() {
    return isAccessAllowed;
  }
  
  ...
}
Code:
public class StartWindow extends JFrame ... {
  private LoginWindow lw;
  ...
  ...

  public StartWindow() {
    lw = new LoginWindow(this);
  ...
  }
  
  public void checkLogin() {  

    if(lw.getIsAccessAllowed())
      //dann Zugriff erlauben
  ...
  }
Edit: Ich habe es noch mal modifiziert. Es ist nicht komplett, den Rest musst Du dazu bauen. Ist auch eher nur als Denkanstoß zu betrachten. :wink:
 

megachucky

Bekanntes Mitglied
nun hab ich gleich das nächste problem, welches ich nicht lösen kann:

wie bringe ich folgendes:

Code:
LoginWindow l = new LoginWindow();
		
		if ( l.isAccessAllowed() == true )
		{
			dataBaseConnectionButton.setEnabled(true);
		}

in die schon vorhandene actionPerformed Methode:

Code:
public void actionPerformed(ActionEvent evt)
	{
		if (evt.getActionCommand().equals("exit"))
		{
			System.out.println("Programm ended");
			System.exit(0);
			}
		
		if (evt.getActionCommand().equals("databaseconnection"))
		{
			System.out.println("DataBase Connection is in progress");
			dbs = new DataBaseConnector();
			dbs.connectToDataBase();
			dbs.disconnectFromDataBase(); // will get its own button later
		}
		
		if (evt.getActionCommand().equals("info"))
		{
			System.out.println("informations");
			InfoWindow iw = new InfoWindow();
		}
		
		if (evt.getActionCommand().equals("login"))
		{
			System.out.println("login window opened");
			LoginWindow lw = new LoginWindow();
	
			
		}
	}

man muss ja den code, um den button zu enablen, ja irgendwie ausführen, evtl auch mit einem actioncommand oder so?
wenn man es nur einfach in die actionPerformed methode reinschreibt, passiert ja (leider) nix, auch wenn ich name und password richtig eingebe und auf login drücke...

ich mach jetzt schluss für heute, sitze nun schon zu lang am PC. trotzdem schonmal danke für die hilfe...
 

L-ectron-X

Gesperrter Benutzer
Mach doch, angelehnt an bisher gesagtes, innerhalb der actionPerformed()-Methode einfach folgendes:
Code:
if(lw.getIsAccessAllowed())
  dataBaseConnectionButton.setEnabled(true);
Der Button wird dann nur enabled, wenn das Ergebnis der Bedingung true ergibt.
 

megachucky

Bekanntes Mitglied
die idee hatte ich auch schon. leider tut sich nix, der button bleibt disabled.

hab allerdings das loginwindow object vor diesen beiden if schleifen erzeugt, wenn ich es in der ersten if schleife lasse, kenn ja die zweite schleife das lw objekt nicht.

aber klappt trotzdem nicht...

hier der code wie es eigentlich gehen sollte, aber leider nicht geht :)



Code:
if (evt.getActionCommand().equals("login"))
		{
			System.out.println("login window opened");
			LoginWindow lw = new LoginWindow();
		}
		
		if ( new LoginWindow().isAccessAllowed() )
		{
			  dataBaseConnectionButton.setEnabled(true);
		}
	}


weist du woran es liegt???

und nur nochmal zum verständnis: da das attribut "isAccessAllowed" static ist, ist es ja ok wenn man mit zwei verschiedenen LoginWindow-Objekten darauf zugreif, richtig? das kann der fehler nicht sein?
(also zuerst mit lw, und dann mit new LoginWindow in der zweiten if schleife)
 

L-ectron-X

Gesperrter Benutzer
Nun überlege doch mal genau.
Mit new erzeugst Du ein neues Objekt (Instanz) einer Klasse.
Schau Dir Deinen Code an. Du arbeitest mit zwei verschiedenen Instanzen, die nichts miteinander zu tun haben.
Außerdem ist auch der Aufruf der statischen Methode nicht richtig.
 

megachucky

Bekanntes Mitglied
Mit new erzeugst Du ein neues Objekt (Instanz) einer Klasse.
Schau Dir Deinen Code an. Du arbeitest mit zwei verschiedenen Instanzen, die nichts miteinander zu tun haben.

ja, das stimmt. hatte ich zuerst ja auch nicht.

aber mir ist einfach nicht klar, wie ich es mit nur einer instanz mache.

wenn ich einfach ins "actionPerformed" reinschreibe:
Code:
 LoginWindow lw = new LoginWindow(),
und dann mit beiden if schleifen drauf zugreife geht es erstens auch nicht, und zweitens, kommt dann zb auch wenn ich das info window aufmache, das loginwindow...

ich wäre wirklich dankbar über ne lösung, ich schaffs einfach nicht. thx
 
G

Gast

Gast
^schreib dir doch für dein LoginWindow eine update methode die du vom Startwindow aus aufrufen kannst und die nachschaut ob der boolean true ist und wenn ja den button enabled
 

L-ectron-X

Gesperrter Benutzer
Na gut, ich bastle mal etwas aus Deinem Code zusammen. Moment.
Eigentlich ist das ganze aber nicht Praxis tauglich, weil die Benutzernamen und Passworte in einer Klasse gespeichert werden. 1. ist das recht unflexibel und 2. absolut nicht sicher. Am besten ist es, wenn Du die Zugangsdaten der Benutzer in einer Datenbank speicherst und zum Vergleichen eine Verbindung dorthin aufbaust.
 

L-ectron-X

Gesperrter Benutzer
Ich habe etwas Fehlerbereinigung betrieben und gleich die gesuchte Funktionalität eingefügt.
Hoffe, dass Du das so ungefähr haben wolltest.
Code:
package client;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class StartWindow extends JFrame implements ActionListener
{
   private LoginWindow lw;

   //Buttons
   private JButton dataBaseConnectionButton;
   private JButton exitButton;
   private JButton loginButton;

   //Menubar
   private JMenuBar menubar;

   //Menues
   private JMenu fileMenu;
   private JMenu infoMenu;

   //MenuItems
   private JMenuItem exitMenuItem;
   private JMenuItem infoMenuItem;
   private JMenuItem loginMenuItem;

   /**
    * Creates a new StartWindow-Object.
    */
   public StartWindow(String title)
   {
      super(title);

      Container cp = getContentPane();
      cp.setLayout(new FlowLayout());

      // create and add MenuBar
      menubar = new JMenuBar();


      // create Menus
      fileMenu = new JMenu("File");
      infoMenu = new JMenu("Info");

      // add Menues to MenuBar
      menubar.add(fileMenu);
      menubar.add(infoMenu);

      //create MenuItems
      loginMenuItem = new JMenuItem("Login");
      exitMenuItem = new JMenuItem("Exit");
      infoMenuItem = new JMenuItem("Info");

      // add MenuItems to Menus
      fileMenu.add(loginMenuItem);
      fileMenu.add(exitMenuItem);
      infoMenu.add(infoMenuItem);

      setJMenuBar(menubar);

      // create Buttons
      dataBaseConnectionButton = new JButton("DataBaseConnection");
      exitButton = new JButton("Exit");
      loginButton = new JButton("Login");

      //enable / disable Buttons
      dataBaseConnectionButton.setEnabled(false);

      // add Buttons to ContentPane
      cp.add(dataBaseConnectionButton);
      cp.add(exitButton);
      cp.add(loginButton);

      // set ActionCommands on MenuItems
      exitMenuItem.setActionCommand("exit");
      infoMenuItem.setActionCommand("info");
      loginMenuItem.setActionCommand("login");

      // set ActionCommands on Buttons
      dataBaseConnectionButton.setActionCommand("databaseconnection");
      exitButton.setActionCommand("exit");
      loginButton.setActionCommand("login");

      // ActionListener methods
      exitMenuItem.addActionListener(this);
      infoMenuItem.addActionListener(this);
      loginMenuItem.addActionListener(this);

      dataBaseConnectionButton.addActionListener(this);
      exitButton.addActionListener(this);
      loginButton.addActionListener(this);

      //other properties for the StartWindow
      setSize(500, 300);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
   }

   public void actionPerformed(ActionEvent evt)
   {

      if (evt.getActionCommand().equals("exit"))
      {
         System.out.println("Programm ended");
         System.exit(0);
         }

      if (evt.getActionCommand().equals("databaseconnection"))
      {
         System.out.println("DataBase Connection is in progress");
         server.DataBaseStuff.connectToDataBase();
      }

      if (evt.getActionCommand().equals("info"))
      {
         System.out.println("informations");
         InfoWindow iw = new InfoWindow();
      }

      if (evt.getActionCommand().equals("login"))
      {
         System.out.println("login window opened");
         lw = new LoginWindow(this);
         lw.setVisible(true);
      }
   }
   
   public void checkPermission() {
      if(lw.getIsAccessAllowed())
         dataBaseConnectionButton.setEnabled(true);
   }

   public static void main(String[] args) {
      new StartWindow("Start Window").setVisible(true);
   }

}
Code:
package client;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class LoginWindow extends JDialog implements ActionListener
{
   private StartWindow owner;

   private JButton loginButton, cancelButton;
   private JLabel nameLabel, passwordLabel;
   private JTextField nameTextField, passwordTextField;

   private String[] names = { "kai", "gaby", "hans" };
   private String[] passwords = { "a", "b", "c" };

   private boolean isAccessAllowed = false;
   private boolean isNameCorrect = false;
   private boolean isPasswordCorrect = false;

   public LoginWindow(StartWindow owner)
   {
      super(owner, "Login Window");
      this.owner = owner;

      Container cp = getContentPane();
      cp.setLayout(new FlowLayout());

      nameLabel = new JLabel("Enter Name: ");
      passwordLabel = new JLabel("Enter Password: ");
      nameTextField = new JTextField(20);
      passwordTextField = new JTextField(20);

      cp.add(nameLabel);
      cp.add(nameTextField);
      cp.add(passwordLabel);
      cp.add(passwordTextField);

      nameTextField.addActionListener(this);
      passwordTextField.addActionListener(this);

      nameTextField.setActionCommand("name");
      passwordTextField.setActionCommand("password");

      loginButton = new JButton("Login");
      cancelButton = new JButton("Cancel");

      loginButton.addActionListener(this);
      cancelButton.addActionListener(this);

      loginButton.setActionCommand("login");
      cancelButton.setActionCommand("cancel");

      cp.add(loginButton);
      cp.add(cancelButton);

      setSize(300, 200);
      setLocationRelativeTo(null);
      setResizable(false);
      setDefaultCloseOperation(DISPOSE_ON_CLOSE);
   }

   public void actionPerformed(ActionEvent evt)
   {
      if ( evt.getActionCommand().equals("name") )
      {
         if(!nameTextField.getText().equals(""))
            passwordTextField.requestFocus();
      }

      if ( evt.getActionCommand().equals("password") )
      {
         if(!passwordTextField.getText().equals(""))
            nameTextField.requestFocus();
      }

      if ( evt.getActionCommand().equals("login") )
      {
         if (checkLogin())
         {
            System.out.println("Access allowed");
            isAccessAllowed = true;
         }
         else
         {
            System.out.println("Access denied. Name and / or Password wrong");
         }
         setVisible(false);
         owner.checkPermission();
      }

      if (evt.getActionCommand().equals("cancel") )
      {
         System.out.println("Login canceled");
         setVisible(false);
      }
   }
   
   public boolean getIsAccessAllowed() {
      System.out.println("Access allowed? "+ isAccessAllowed);
      return isAccessAllowed;
   }
   
   private boolean checkLogin() {
      boolean isPasswordCorrect = false;
      boolean isNameCorrect = false;
   
      for (int i=0; i<passwords.length; i++)
      {
         if (passwords[i].equals(passwordTextField.getText()) )
         {
            System.out.println("password correct");
            isPasswordCorrect = true;
         }
      }
         
      for (int i=0; i<names.length; i++)
      {
         if (names[i].equals(nameTextField.getText()))
         {
            System.out.println("name correct");
            isNameCorrect = true;
         }
      }
      
      if(isNameCorrect && isPasswordCorrect)
         return true;
         
      return false;
   }

}
 

megachucky

Bekanntes Mitglied
erstmal vielen dank.

also wenn ich deinen code nutze funktioniert es nun endlich genau wie es soll.

muss leider ernüchternd zugeben, dass ich das wohl nie hingebracht hätte.

um die zwei klassen miteinander zu "verbinden", muss man also des einen fensters das andere fenster übergeben, damit die beiden eine verbindung haben!? hab ich das richtig verstanden? und dadurch kann ich dann auch auf die methen des anderen fensters zugreifen, oder wie genau ist das zu erklären ?!?




wenn ich meine code aber umändere kommt folgende nullpointer exception:

ava.lang.NullPointerException
at client.StartWindow.checkPermission(StartWindow.java:181)
at client.LoginWindow.actionPerformed(LoginWindow.java:128)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1764)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1817)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
at java.awt.Component.processMouseEvent(Component.java:5134)
at java.awt.Component.processEvent(Component.java:4931)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3639)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3480)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
at java.awt.Container.dispatchEventImpl(Container.java:1609)
at java.awt.Window.dispatchEventImpl(Window.java:1590)
at java.awt.Component.dispatchEvent(Component.java:3480)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)

hab leider den fehler noch nicht gefunden, aber kann ja eigentlich nur ein abschreib fehler sein ?!?
wie heißt nochmal dieses programm / tool um zwei codes miteinander zu vergleichen (unter eclipse). damit sollte ich den fehler bei mir schneller finden...


auf jeden fall vielen dank für deine ausführliche hilfe...
 

L-ectron-X

Gesperrter Benutzer
*chucky* hat gesagt.:
um die zwei klassen miteinander zu "verbinden", muss man also des einen fensters das andere fenster übergeben, damit die beiden eine verbindung haben!? hab ich das richtig verstanden? und dadurch kann ich dann auch auf die methen des anderen fensters zugreifen, oder wie genau ist das zu erklären ?!?
Da triffst Du ziemlich genau den Nagel auf den Kopf.
Du übergibst dem JDialog bei seiner Instanziierung eine Referenz auf den JFrame. Damit hast Du innerhalb des JDialogs Zugriff auf die Methoden des JFrames. Und so können sich beide Objekte gegenseitig benutzen.
 

Dysall

Mitglied
also ihr macht das echt kompliziert leute... also: wies funktioniert..

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





public class NamePass extends JFrame implements ActionListener
{
	JPasswordField tfpass = new JPasswordField();
	JTextField tfname = new JTextField();
	JButton okb = new JButton("OK");

	void buildConstraints(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy)
	{
		gbc.gridx = gx;
		gbc.gridy = gy;
		gbc.gridwidth = gw;
		gbc.gridheight = gh;
		gbc.weightx = wx;
		gbc.weighty = wy;
	}

	public NamePass() {
		super("Passwort");
		setBounds(340, 350, 290, 110);
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		setEnabled(true);
		GridBagLayout gridbag = new GridBagLayout();
		GridBagConstraints constraints = new GridBagConstraints();
		JPanel pane = new JPanel();
		pane.setLayout(gridbag);

		//Name label
		
		buildConstraints(constraints, 0, 0, 1, 1, 10, 40);
		constraints.fill = GridBagConstraints.NONE;
		constraints.anchor = GridBagConstraints.EAST;
		JLabel label1 = new JLabel("Name: ", JLabel.LEFT);
		gridbag.setConstraints(label1, constraints);
		pane.add(label1);


		//passwort label
		
		buildConstraints(constraints, 0, 1, 1, 1, 0, 40);
		constraints.fill = GridBagConstraints.NONE;
		constraints.anchor = GridBagConstraints.EAST;
		JLabel label2 = new JLabel("Passwort: ", JLabel.LEFT);
		gridbag.setConstraints(label2, constraints);
		pane.add(label2);
		
		//Name textfeld

		buildConstraints(constraints, 1, 0, 1, 1, 90, 0);
		constraints.fill = GridBagConstraints.HORIZONTAL;
		
		gridbag.setConstraints(tfname, constraints);
		tfname.setText("Bernd");
		pane.add(tfname);
		tfname.setEditable(true);
		
		//pas textfeld
		
		buildConstraints(constraints, 1, 1, 1, 1, 0, 0);
		constraints.fill = GridBagConstraints.HORIZONTAL;
		tfpass.setEchoChar('*');
		gridbag.setConstraints(tfpass, constraints);
		pane.add(tfpass);
		tfpass.setEditable(true);
		

		// OK-button

		buildConstraints(constraints, 0, 2, 2, 1, 0, 20);
		constraints.fill = GridBagConstraints.NONE;
		constraints.anchor = GridBagConstraints.CENTER;
		 	
		gridbag.setConstraints(okb, constraints);
		okb.addActionListener(this);
		pane.add(okb);

		
		

		//sichtbar machen

		setContentPane(pane);
		setVisible(true);
	
}

	public void actionPerformed(ActionEvent evt)
	{
		
		
		Object source = evt.getSource();
		if (source == okb)
		{
		String user = tfname.getText();
		String id = tfpass.getText();

		if (Passwort.checkPass(user, id)==true)
		{	JOptionPane.showMessageDialog(null, "WIllkommen "+tfname.getText()+"!", "Nachricht ", 							JOptionPane.INFORMATION_MESSAGE);
			
			System.exit(0);
		}
		
		else
		{
		JOptionPane.showMessageDialog(null, "Falsch, nochmals", "Nachricht ", 								JOptionPane.INFORMATION_MESSAGE);
			setVisible(false);
			NamePass frame = new NamePass();
			
		}
		
		}
	
	}




	

		

	public static void main(String[] args)
	{
		//FFrame.los();
		NamePass frame = new NamePass();
		
	}
	
	
}





Code:
public class Passwort{
		
	public static String nameB = "Bernd";	
	public static String nameX = "Xenia";
	private static String passB = "BEER";
	private static String passX = "Schatz";


	public static boolean checkPass(String name, String pass)
	{

		boolean check = false;
		if (name.equals(nameB)==true)
			{ if (pass.equals(passB)==true) check = true;}
		

		if (name.equals(nameX)==true)
			{ if (pass.equals(passX)==true) check = true; }
		

		return check;
	}
}



so sieht ein gescheites pw-prog aus... kurz und übersichtlich
 

megachucky

Bekanntes Mitglied
ok, vielen dank euch beiden.

und wie heißt noch dieses feature unter eclipse mit dem ich zwei codes nebeneinander vergleichen kann?
 

L-ectron-X

Gesperrter Benutzer
Nettes Programm BE:ER. :roll:
Ich hatte ja schon oben angedeutet, dass ich nur den Code von *chucky* erweitert bzw. korrigiert habe.
Ich gehe mal davon aus, dass er sich schon etwas dabei gedacht hat, daher habe ich kein neues Programm geschrieben.
Dein Programm ist ja schön und gut, aber leider auch nicht Praxis tauglich. Die Usernamen und Passworte stehen im Klartext in der Bytecode-Datei. Dieses kann ohne Probleme dekompiliert werden.
Außerdem ist diese Lösung recht unflexibel. Du musst jedes mal die Datei editieren, wenn Du einen User hinzufügen oder löschen willst.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Bekomm altes Uni-Projekt in java nicht mehr zum laufen Java Basics - Anfänger-Themen 7
C Vererbung Wie bekomm ich das Programm zum laufen? Java Basics - Anfänger-Themen 4
H wie bekomm ich ein Foto in mein Programm rein? Java Basics - Anfänger-Themen 8
J Wo bekomm ich Java.io her ? Java Basics - Anfänger-Themen 2
C wie bekomm ich ein animiertes .gif bild in meinen JPanel Java Basics - Anfänger-Themen 2
B Wo bekomm ich Gnu her? Java Basics - Anfänger-Themen 4
X Warum bekomm ich ne NullPointerException ? Java Basics - Anfänger-Themen 3
M Sockets. Bekomm keine Antwort vom Server. Java Basics - Anfänger-Themen 7
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
M Private Variable Java Basics - Anfänger-Themen 2
Gaudimagspam Attribute einfügen private Java Basics - Anfänger-Themen 3
N JUnit und private Methoden testen. Java Basics - Anfänger-Themen 9
Z private Klassenvariablen Java Basics - Anfänger-Themen 8
S Private int in Klasse Java Basics - Anfänger-Themen 4
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
J Klasse wird als private erkannt obwohl sie public deklariert ist Java Basics - Anfänger-Themen 3
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
shiroX Klassen Klasse/Methode private final jUnit-Fehler Java Basics - Anfänger-Themen 5
N Instanzvariablen als private... Java Basics - Anfänger-Themen 2
A Private Attribut aus fremder Klasse lesen ? Java Basics - Anfänger-Themen 19
P Methoden private int[] in main Java Basics - Anfänger-Themen 16
A Klassen Werte in den private Bereich übergeben Java Basics - Anfänger-Themen 5
C Collections: private Map Java Basics - Anfänger-Themen 4
M Wie private Methoden mit Asserstions testen? Java Basics - Anfänger-Themen 3
M Verständnisfrage zu JUnit Tests und private Methoden Java Basics - Anfänger-Themen 3
D Klassenvariablen standardmäßig private oder public? Java Basics - Anfänger-Themen 2
W private Array Loops Java Basics - Anfänger-Themen 4
B public/private nur 1x schreiben Java Basics - Anfänger-Themen 3
H Privat ist nicht mehr private Java Basics - Anfänger-Themen 7
J Vererbung Zugriff auf private Variable Java Basics - Anfänger-Themen 10
A Variablen lokale Variable als private? Java Basics - Anfänger-Themen 3
A private string array Java Basics - Anfänger-Themen 5
B auf private Variable durch eine Methode zugreifen Java Basics - Anfänger-Themen 8
J Probleme mit verschiedenen Private Klassen Java Basics - Anfänger-Themen 3
T public-private problem Java Basics - Anfänger-Themen 5
C Comparator und private Variablen Java Basics - Anfänger-Themen 7
K Methoden als private deklarieren? Java Basics - Anfänger-Themen 13
K Protected und Private Deklaration Java Basics - Anfänger-Themen 8
F Im Konstruktor mit Settern auf private Attribute zugreifen - oder nicht? Java Basics - Anfänger-Themen 18
B Kapselung Klasse private, Konstruktor protected Java Basics - Anfänger-Themen 10
H NEtBeans: Fehler: XXX has private access... Java Basics - Anfänger-Themen 2
K Kapselung public / private verständis problem Java Basics - Anfänger-Themen 17
E einfache Frage zu private Java Basics - Anfänger-Themen 26
N public class -> public method -> variable private? Java Basics - Anfänger-Themen 10
W Private Methode variablen übergeben..?! WIE! Java Basics - Anfänger-Themen 30
K OOP Datenkapselung mittels private - length Attribut bei Array Java Basics - Anfänger-Themen 3
L Private Methode in Subklasse? Java Basics - Anfänger-Themen 2
S Private Class Problem Java Basics - Anfänger-Themen 17
K Kann man Private-Konstruktoren doch aurufen? Java Basics - Anfänger-Themen 8
Luk10 Vererben von private instanzvariablen Java Basics - Anfänger-Themen 20
P zugriff auf private variablen Java Basics - Anfänger-Themen 5
A Allgemeine Frage zur Sichtbarkeit "private" Java Basics - Anfänger-Themen 5
berliner Klassen Vererbung und Zugriff auf innere private Variable Java Basics - Anfänger-Themen 22
G field public/private wann Java Basics - Anfänger-Themen 11
Spin private Frage Java Basics - Anfänger-Themen 16
G Zugriff auf private Variablen einer inneren Klasse Java Basics - Anfänger-Themen 5
G Private Messages versenden Java Basics - Anfänger-Themen 13
S Zugriffe über Private Instanzvariablen Java Basics - Anfänger-Themen 3
J Public / Private Keys speichern bzw. lesen? Java Basics - Anfänger-Themen 8
R Private Methoden von auserhalb aufrufen Java Basics - Anfänger-Themen 2
N private variable vom typ einer klasse Java Basics - Anfänger-Themen 20
A in abstract Klasse private Variablen Java Basics - Anfänger-Themen 3
G GUI Controls private oder public Java Basics - Anfänger-Themen 6
G Variablen public oder private? Java Basics - Anfänger-Themen 9
P Private Klassen Java Basics - Anfänger-Themen 4
F Frage zur Vererbung und Zugriffmodifikator private Java Basics - Anfänger-Themen 3
S private public Java Basics - Anfänger-Themen 5
R private / public Frage Java Basics - Anfänger-Themen 7
S private String text; -> "Illegal start of expression Java Basics - Anfänger-Themen 7
R Klasse nicht sichtbar(kein private-Fehler) Java Basics - Anfänger-Themen 2
G Public ,private,protected Java Basics - Anfänger-Themen 1
R Private Klasse in Applet nutzen? Java Basics - Anfänger-Themen 9
B Instanzvariablen private? Java Basics - Anfänger-Themen 5
M Sichtbarkeit von private Java Basics - Anfänger-Themen 2
A public/private/etc. Zusatz weglassen Java Basics - Anfänger-Themen 2
M OOP frage, private variablen default-wert zuweisen sinnvoll? Java Basics - Anfänger-Themen 5
M [SOLVED]private Daten head - neues objekt? Java Basics - Anfänger-Themen 12
H Vererbung:private Java Basics - Anfänger-Themen 7
U public, private, protected und "default access" - Java Basics - Anfänger-Themen 14
T private final String oder final String? Was ist richtig? Java Basics - Anfänger-Themen 4
M Jede Variable als private, protected etc. deklarieren? Java Basics - Anfänger-Themen 7
U was macht "private" ? :) Java Basics - Anfänger-Themen 7
G private methode wird aus anderer klasse aufgerufen? Java Basics - Anfänger-Themen 3
H private anstatt public Java Basics - Anfänger-Themen 2
H public und private Java Basics - Anfänger-Themen 5
A Public/Private und wie importieren? Java Basics - Anfänger-Themen 13
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
berserkerdq2 Wie lege ich ein Attribut comparator an? Java Basics - Anfänger-Themen 13
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4
U Wie ein Attribut von einer Klassenmethode in der Klasse speichern= Java Basics - Anfänger-Themen 2
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
C Setter-Methode mit final-Attribut Java Basics - Anfänger-Themen 9
T Inhalt aus TextField in Attribut einer Instanz schreiben Java Basics - Anfänger-Themen 5
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
D Attribut Telefonnummer - eigene Klasse oder String Java Basics - Anfänger-Themen 13
itsmejo Erste Schritte Auf Attribut einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 14
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
X Attribut initialisieren Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben