Klassen Auf Instanz anderer Klasse zugreifen

BZZZ

Mitglied
hi,
Ich muss ein Adress Buch schreiben mit einer GUI. über die GUI kann man über nen Button sich dann die Kontakte anzeigen lassen.
Nun muss ich von der Klasse showContacts aus auf die Main klasse zugreifen um die Instanz von AdressBook zu kriegen, wo ya die gespeicherten Daten (in einer TreeMap) sind um sie anzeigen zu können.

ich hänge seit Tagen an diesem Problem... ich hoffe ihr könnt mir helfen.

Hier die main:
Java:
package book;import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.TreeView;

public class Main extends Application implements Initializable {
    @FXML
    private Button btnsave;

    @FXML
    private Button btnshow;

    @FXML
    private TextField txtemail;

    @FXML
    private Label lbltel;

    @FXML
    private Label lblemailc;

    @FXML
    private Label lbladc;

    @FXML
    private TextField txtad;

    @FXML
    private Label lblemail;

    @FXML
    private Label lblkey;

    @FXML
    private Label lblnc;

    @FXML
    private Label lblvn;

    @FXML
    private Label lblnnc;

    @FXML
    private Button btnadd;

    @FXML
    private Label lblnn;

    @FXML
    private Label lbltelc;

    @FXML
    private TextField txtemailc;

    @FXML
    private TextField txttel;

    @FXML
    private TextField txttelc;

    @FXML
    private TextField txtnn;

    @FXML
    private TextField txthn;

    @FXML
    private TextField txtkey;

    @FXML
    private TextField txthnc;

    @FXML
    private TextField txtnnc;

    @FXML
    private Button btnshowCon;

    @FXML
    private TextField txtvn;

    @FXML
    private TextField txtadc;

    @FXML
    private Button btnchange;

    @FXML
    private TextField txtvnc;

    @FXML
    private Label lblad;

    @FXML
    private Button btndel;

    @FXML
    void handlechangebtn(ActionEvent event) {
    }

    @FXML
    void handlesavebtn(ActionEvent event) {
    }

    @FXML
    void handledelbtn(ActionEvent event) {
    }

    @FXML
    void handleshowbtn(ActionEvent event) {
    }

    @FXML
    void handleShowCon(ActionEvent event) {
    }
    
	@FXML
	void hinzu(ActionEvent event) throws AlreadyExistsException {
	}
	   
	@Override
	public void start(Stage prim) throws Exception {
		 Parent root = FXMLLoader.load(getClass().getResource("/book/root.fxml"));
		 prim.setTitle("Neuer Eintrag - Günay Catak s812496");
		 prim.setScene(new Scene (root,370,560));
		 prim.setResizable(false);
		 prim.show();
	}
	  
	@Override
	public void initialize(URL location, ResourceBundle resources) {
	AdressBook book = new AdressBook();
		//Disable change inputs
		txtvnc.setDisable(true);
		txtnnc.setDisable(true);
		txttelc.setDisable(true);
		txtadc.setDisable(true);
		txthnc.setDisable(true);
		txtemailc.setDisable(true);
		btnadd.setOnAction(new EventHandler<ActionEvent>() {

	@Override
	public void handle(ActionEvent arg0) {
		ContactDetails cd = new ContactDetails(txtvn.getText().toString(),txtnn.getText().toString(),txtad.getText().toString(),txttel.getText(),txthn.getText(),txtemail.getText().toString());
		try {
			book.addDetails(cd);
			book.setSizeOfBook(book.getNumberofEntries());
			System.out.println("Eintrag hinzugefügt");
		} catch (AlreadyExistsException e) {
			// TODO Auto-generated catch block
			e.getMessage();
		}
		System.out.println(book.getNumberofEntries());
	}
		});
		btnchange.setOnAction(new EventHandler <ActionEvent>() {
			@Override
			public void handle(ActionEvent arg0)  {
				//Enable change inputs
				txtvnc.setDisable(false);
				txtnnc.setDisable(false);
				txttelc.setDisable(false);
				txtadc.setDisable(false);
				txthnc.setDisable(false);
				txtemailc.setDisable(false);
			}
		});
		btnshow.setOnAction(new EventHandler <ActionEvent>() {
			@Override
			public void handle(ActionEvent arg0)  {
				try {
					txtvnc.setText(book.getDetails(txtkey.getText()).vorname);
					txtnnc.setText(book.getDetails(txtkey.getText()).nachname);
					txtadc.setText(book.getDetails(txtkey.getText()).adresse);
					txtemailc.setText(book.getDetails(txtkey.getText()).email);
					txttelc.setText(book.getDetails(txtkey.getText()).TelNr);
					txthnc.setText(book.getDetails(txtkey.getText()).hausnr);
				} catch (DetailsNotExistException e) {
					e.getMessage("Der Eintrag existiert nicht!!");
				}
			}
		});
		btnsave.setOnAction(new EventHandler <ActionEvent>() {
			@Override
			public void handle(ActionEvent arg0) {
				try {
					book.getDetails(txtkey.getText());
					ContactDetails cd2 = new ContactDetails(txtvnc.getText(), txtnnc.getText(), txtadc.getText(), txttelc.getText(), txthnc.getText(), txtemailc.getText());
					book.changeDetails(txtkey.getText(), cd2);
				} catch (NoParamException e) {
					e.printStackTrace();
				} catch (DetailsNotExistException e) {
					// TODO Auto-generated catch block
					e.getMessage("Der Eintrag esxistiert nicht!");
				}
				System.out.println("Eintrag geändert");
			}
		});
	btndel.setOnAction(new EventHandler<ActionEvent>() {
		@Override
		public void handle(ActionEvent arg0) {
			try {
				book.removeDetails(txtkey.getText());
			} catch (DetailsNotExistException e) {
				e.getMessage();
			}
			System.out.println("Eintrag gelöscht");
			System.out.println("Übrige Einträge: " + book.getNumberofEntries());
		}
	});
	btnshowCon.setOnAction(new EventHandler<ActionEvent>(){
		@Override
		public void handle(ActionEvent arg0) {
			// TODO Auto-generated method stub
			try {
				Parent root2 = FXMLLoader.load(getClass().getResource("/book/root2.fxml"));
				 Stage stage = new Stage();
				 stage.setTitle("Neuer Eintrag - Günay Catak s812496");
				 stage.setScene(new Scene (root2,1190,390));
				 stage.setResizable(false);
				 stage.show();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	});
	}  
}

Hier wird per Gui der Kontakt hinzugefügt.
In der Klasse Adressbook ist eine TreeMap, wo die Kontakte drin gespeichert sind. und über verschiedene Methoden verwaltet werden können:
AdressBook:
Java:
package book;import java.util.TreeMap;

public class AdressBook implements AdressBookInterface {
	public int sizeOfBook;
	
	public TreeMap <String,ContactDetails> book = new TreeMap<>();
	
	@Override
	public ContactDetails getDetails(String key) throws DetailsNotExistException {
		if (book.get(key) == null)
			throw new DetailsNotExistException();
		else
			return book.get(key);
	}
	
	public void setSizeOfBook(int size) {
		this.sizeOfBook = size;
	}
	
	public int getSizeOfBook() {
		return sizeOfBook;
	}
	
	@Override
	public boolean KeyInUse(String key) throws NoParamException {
		if (key == null || key == "") {
			throw new NoParamException ();
		}		
		if (book.containsKey(key)){
			return true;
		}
		return false;
	}

	@Override
	public void addDetails(ContactDetails details)
			throws AlreadyExistsException {
		if (book.containsKey(details.vorname)) {
			throw new AlreadyExistsException();
		}
		//zwei einträge mit verschiedenen keys (vorname,nachname)
		book.put(details.vorname, details);
		book.put(details.nachname, details);
	}

	@Override
	public void changeDetails(String oldkey, ContactDetails details) throws NoParamException {
		if (oldkey == null || oldkey =="")
			throw new NoParamException();
		book.replace(oldkey, details);
		book.replace(details.nachname, details);
	}

	@Override
	public ContactDetails[] search(String keyPrefix) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getNumberofEntries() {
		return book.size() / 2;
	}
	
	@Override
	public void removeDetails(String key) throws DetailsNotExistException {
		book.remove(key);
		if(key == null || key == " ") 
			throw new DetailsNotExistException();
	}
}

und zu guter letzt die Klasse ShowContacts wo das ganze angezeigt werden soll:

Java:
package book;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ListView;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TreeView;

public class showContact implements Initializable {

    @FXML
    private TableColumn<?, ?> clmnn;

    @FXML
    private TableColumn<?, ?> clmad;

    @FXML
    private ListView<?> lstcon;

    @FXML
    private TableColumn<?, ?> clmvn;

    @FXML
    private TableColumn<?, ?> clmtelnr;

    @FXML
    private TableView<?> tblCon;

    @FXML
    private TreeView<?> treeCon;

    @FXML
    private TableColumn<?, ?> clmhn;

    @FXML
    private TableColumn<?, ?> clmemail;
    
    AdressBook ab = new AdressBook();

	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		System.out.println("Einträge: " + ab.getSizeOfBook());
		//ObservableList
//		ObservableList<ListView> ol = FXCollections.observableArrayList();
	}
}

Hab da immer mal ein bisschen rumprobiert also nicht wundern wenn da ein bisschen müll steht.. 🙂

Danke schonmal...
 
Zuletzt bearbeitet von einem Moderator:
Mache AdressBook book zu einer Instanzvariablen deiner Main-Klasse, dann erzeuge in deiner Main-Klasse in deren initialize-Methode eine Instanz von showContact und übergebe der die AdressBook Instanz.
 

Zurück
Oben