Avatar billede suix Nybegynder
07. februar 2004 - 14:47 Der er 8 kommentarer og
1 løsning

Data fra anden klasse

Hej eksperter,
Jeg har et program bestående af 2 klasser, hvor jeg prøver på at referere til et array deklareret i klasse 1 fra klasse 2. Jeg opretter et nyt objekt af klasse 1 og refererer derefter til arrayet, men det er altid tomt, selvom der bliver fyldt data i en funktion. Der et kun hvis jeg fylder data i når det bliver deklareret i klasse 1, at dataene kan ses i klasse 2? Håber I har en løsning eller alternativ metode.
mvh
SuiX
Avatar billede trp79 Nybegynder
07. februar 2004 - 16:36 #1
Det burde kunne lade sig gøre uden problemer. Kan du ikke prøve at poste lidt kode, så fejlen kan identificeres?
Avatar billede suix Nybegynder
07. februar 2004 - 17:08 #2
Ok, her kommer lidt kode:
package software;

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

public class BrugerlogGUI extends JFrame {
  protected String[] input= new String[3];
  private static ResultSet results;
  private static Connection con=DbAdgang.getDbCon();
  JPanel contentPane;
  JLabel loginL = new JLabel();
  JLabel brugerL = new JLabel();
  JLabel passwordL = new JLabel();
  JTextField brugerTF = new JTextField();
  JPasswordField passwordTF = new JPasswordField();
  JButton loginB = new JButton();

  //Construct the frame
  public BrugerlogGUI() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  //Component initialization
  private void jbInit() throws Exception {
    contentPane = (JPanel)this.getContentPane();
    loginL.setFont(new java.awt.Font("Dialog", 1, 24));
    loginL.setText("Login");
    loginL.setBounds(new Rectangle(16, 16, 81, 38));
    contentPane.setLayout(null);
    this.setResizable(false);
    this.setSize(new Dimension(292, 205));
    this.setTitle("Brugerlogin");
    brugerL.setFont(new java.awt.Font("Dialog", 0, 12));
    brugerL.setText("Brugernavn:");
    brugerL.setBounds(new Rectangle(16, 79, 71, 23));
    passwordL.setBounds(new Rectangle(16, 103, 71, 23));
    passwordL.setText("Password:");
    passwordL.setFont(new java.awt.Font("Dialog", 0, 12));
    brugerTF.setText("");
    brugerTF.setBounds(new Rectangle(92, 81, 122, 18));
    passwordTF.setText("");
    passwordTF.setBounds(new Rectangle(92, 105, 122, 18));
   
    loginB.setBounds(new Rectangle(101, 130, 93, 23));
    loginB.setText("Login");
    loginB.addActionListener(new Brugerlog_loginB_actionAdapter(this));
    contentPane.add(loginL, null);
    contentPane.add(brugerL, null);
    contentPane.add(passwordL, null);
    contentPane.add(passwordTF, null);
    contentPane.add(brugerTF, null);
    contentPane.add(loginB, null);
  }

  //Overridden so we can exit when window is closed
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }
  void loginB_actionPerformed(ActionEvent e) {
        String query="select Brugernavn,Password,Adminret from Brugere where Brugernavn ='"+brugerTF.getText()+"'";
        try{
          Statement stmt = con.createStatement();
          results = stmt.executeQuery(query);
          while(results.next())
          {
            input[0]=(results.getString("Brugernavn")); //Kolonnenavn hvorfra data hentes.
            input[1]=(results.getString("Password"));
            input[2]=(results.getString("Adminret"));
          }
          if (input[0].equals(brugerTF.getText()) && input[1].equals(passwordTF.getText()))
          {
            MenuGUI m = new MenuGUI();
            this.hide();
          }
          else
          {
              JOptionPane.showMessageDialog(null,"Forkert brugernavn eller password","Forkert Login",JOptionPane.INFORMATION_MESSAGE);
          }
        }catch (Exception f)
        {JOptionPane.showMessageDialog(null,"Forkert brugernavn eller password","Forkert Login",JOptionPane.INFORMATION_MESSAGE);
        }
    }
}

class Brugerlog_loginB_actionAdapter implements java.awt.event.ActionListener {
  BrugerlogGUI adaptee;

  Brugerlog_loginB_actionAdapter(BrugerlogGUI adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.loginB_actionPerformed(e);
  }
}
_____________________________________________________________
package software;

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

public class MenuGUI extends JFrame {
  JLabel menuL = new JLabel();
  JButton lagerB = new JButton();
  JButton kunderB = new JButton();
  JButton jButton3 = new JButton();
  JButton jButton4 = new JButton();
  JButton jButton5 = new JButton();
  BrugerlogGUI b = new BrugerlogGUI();
  JButton adminL = new JButton();

  public MenuGUI() {
    try {
      jbInit();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  void jbInit() throws Exception {
    menuL.setFont(new java.awt.Font("Dialog", 1, 24));
    menuL.setRequestFocusEnabled(true);
    menuL.setText("Menu");
    menuL.setBounds(new Rectangle(236, 14, 79, 38));
    this.getContentPane().setLayout(null);
    this.setSize(550, 300);
    lagerB.setBounds(new Rectangle(25, 78, 175, 28));
    lagerB.setFont(new java.awt.Font("Dialog", 0, 12));
    lagerB.setText("Lager");
    kunderB.setText("Kunder");
    kunderB.setBounds(new Rectangle(25, 116, 175, 28));
    kunderB.setFont(new java.awt.Font("Dialog", 0, 12));
    jButton3.setText("jButton1");
    jButton3.setBounds(new Rectangle(25, 154, 175, 28));
    jButton3.setFont(new java.awt.Font("Dialog", 0, 12));
    jButton4.setText("jButton1");
    jButton4.setBounds(new Rectangle(25, 191, 175, 28));
    jButton4.setFont(new java.awt.Font("Dialog", 0, 12));
    jButton5.setText("jButton1");
    jButton5.setBounds(new Rectangle(25, 229, 175, 28));
    System.out.println(b.input[1]);
//    if (b.input[2] == "1") {

  //  }
    this.setResizable(false);
    this.setTitle("Menu");
    adminL.setText("Administrationsværktøjer");
    adminL.addActionListener(new MenuGUI_adminL_actionAdapter(this));
    adminL.setBounds(new Rectangle(298, 77, 175, 28));
    adminL.setFont(new java.awt.Font("Dialog", 0, 12));
    this.getContentPane().add(menuL, null);
    this.getContentPane().add(lagerB, null);
    this.getContentPane().add(kunderB, null);
    this.getContentPane().add(jButton3, null);
    this.getContentPane().add(jButton4, null);
    this.getContentPane().add(jButton5, null);
    this.getContentPane().add(adminL, null);

    //placer skærmbilledet midt på skærmen
    Dimension scr = Toolkit.getDefaultToolkit().getScreenSize();
    setLocation( (scr.width - getWidth()) / 2, (scr.height - getHeight()) / 2);
    show();
  }

  void adminL_actionPerformed(ActionEvent e) {
AdminGUI a = new AdminGUI();
    a.show();
    this.hide();
  }
}
class Menu_this_windowAdapter extends java.awt.event.WindowAdapter {
  Menu adaptee;

  Menu_this_windowAdapter(Menu adaptee) {
    this.adaptee = adaptee;
  }
}

class MenuGUI_adminL_actionAdapter implements java.awt.event.ActionListener {
  MenuGUI adaptee;

  MenuGUI_adminL_actionAdapter(MenuGUI adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.adminL_actionPerformed(e);
  }
}
Avatar billede arne_v Ekspert
07. februar 2004 - 17:16 #3
Ofte vil man i den slags situationer kalde klasse 2's constructor med
en referance til en instans af klasse 1, hvis constructoren gemmer
den referance i en instans variabel, så kan alle metoder i klasse 2
få adgang til alle public metoder i klasse 1 inkl. get/set af data-
Avatar billede suix Nybegynder
07. februar 2004 - 18:24 #4
Hej Arne_v,
Hvis jeg gør det, får jeg så en korrekt objektorienteret klasse? Gider du evt. give et kodeeksempel?
Avatar billede arne_v Ekspert
07. februar 2004 - 18:26 #5
Ja

5 minutter
Avatar billede arne_v Ekspert
07. februar 2004 - 18:33 #6
A.java:

public class A {
  private int v;
  public int getV() {
      return v;
  }
  public void setV(int v) {
      this.v = v;
  }
}

B.java:

public class B {
  private A a;
  public B(A a) {
      this.a = a;
  }
  public void x() {
      a.setV(a.getV() + 10);
  }
}

i noget kode:

A a = new A();
B b = new B(a);
b.x();
Avatar billede ulrikm Nybegynder
07. februar 2004 - 18:39 #7
if (b.input[2] == "1") {

    }
- du skal nok nærmere lave en bruger klasse, som bruges i stedet for dit array:

class User
{
    private String name, password;
    private boolean isAdmin;
    User( String name, String password, boolean isAdmin )
    {
        this.name = name;
        //....
    }
    public boolean isAdmin()
    {
      return isAdmin;
    }
    //...
}

og konstruere den:
User user = new User( ..., results.getString("Adminret").equals("1") )

og sende den med til din MenuGUI:
MenuGUI m = new MenuGUI( user );

og checke admin rettigheder:

if( user.isAdmin() )
{
  //... 
}
Avatar billede suix Nybegynder
07. februar 2004 - 21:29 #8
Har fået det til at virke nu.
Jeg konverterede array[2] til en streng, som jeg førte med over i klasse 2, hvor jeg tog en global variabel og sat den lige med strengen, som jeg så kunne detektere på.
___________
public MenuGUI(String bruger) {
    try {
      admin=bruger;
      jbInit();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }

  }
Avatar billede suix Nybegynder
05. september 2004 - 12:33 #9
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester