Hey Leute,
ich habe für meine Hausarbeit ein Code über ein Telefonbuch mit 5 Klassen erstellt.
In meinem Code habe ich keinerlei Fehlermeldungen. Wenn ich jedoch den Code starten möchte erscheint auf der Console diese Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 2
at java.desktop/java.awt.Container.getComponent(Container.java:354)
at java.desktop/javax.swing.JMenu.getMenuComponent(JMenu.java:871)
at hausarbeit_JAVA.TelefonbuchGUI.setMenusettings(TelefonbuchGUI.java:534)
at hausarbeit_JAVA.TelefonbuchGUI.erstelleGui(TelefonbuchGUI.java:221)
at hausarbeit_JAVA.TelefonbuchGUI.<init>(TelefonbuchGUI.java:93)
at hausarbeit_JAVA.TelefonbuchGUI.lambda$10(TelefonbuchGUI.java:557)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
ich habe keine Ahnung wo das Problem liegt. Auf meinem Mac lief der Code tadellos und diesen Code habe ich auf mein Windows Eclipse kopiert, liegt es eventuell daran?
Eine weitere Vermutung ist, dass etwas mit den Libraries nicht stimmt. Habe JavaSe-17 und JavaSe-1.8 drin.
ich habe für meine Hausarbeit ein Code über ein Telefonbuch mit 5 Klassen erstellt.
In meinem Code habe ich keinerlei Fehlermeldungen. Wenn ich jedoch den Code starten möchte erscheint auf der Console diese Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 2
at java.desktop/java.awt.Container.getComponent(Container.java:354)
at java.desktop/javax.swing.JMenu.getMenuComponent(JMenu.java:871)
at hausarbeit_JAVA.TelefonbuchGUI.setMenusettings(TelefonbuchGUI.java:534)
at hausarbeit_JAVA.TelefonbuchGUI.erstelleGui(TelefonbuchGUI.java:221)
at hausarbeit_JAVA.TelefonbuchGUI.<init>(TelefonbuchGUI.java:93)
at hausarbeit_JAVA.TelefonbuchGUI.lambda$10(TelefonbuchGUI.java:557)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
ich habe keine Ahnung wo das Problem liegt. Auf meinem Mac lief der Code tadellos und diesen Code habe ich auf mein Windows Eclipse kopiert, liegt es eventuell daran?
Eine weitere Vermutung ist, dass etwas mit den Libraries nicht stimmt. Habe JavaSe-17 und JavaSe-1.8 drin.
Java:
1.Klasse
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.List;
/*
* Die Klasse TelefonbuchGUI kriegt die Klasse JFRAME vererbt.
= Somit ist TelefonbuchGUI ein JFrame mit zusätzlichen Methoden
* und Funktionen.
»* In dieser Klasse werden alle Elemente für die GUI erstellt und
* wiedergegeben (Benutzerebene)
*/
public class TelefonbuchGUI extends JFrame{
private static final long serialVersionUID = -7664429122669085214L;
//Der. manager, damit die Daten geladen werden können
private TelefonbuchManager manager;
//Die Menu-Bar I
private JMenuBar menuBar;
//Namen. für Scenes
private static final String KONT_SCREEN = "kontakt";
private static final String TELB_SCREEN = "telefonbuch";
/*
* Die Panels
* Auf dem mainPanel ist die nenu-Bar mi% dem Candoanal
* — kontaktFormularPanel (Card -> KONT_SCREEN)
* - telefonbuchPanel (Card -> TELB_SCREEN)
*/
private JPanel mainPanel;
private JPanel cardpanel;
private JPanel welcomePanel;
private JPanel kontaktFormularPanel;
private JPanel telefonbuchPanel;
//Die Kontakt-Scene
private JTextField nameTextField;
private JTextField adresseTextField;
private JTextField emailTextField;
private JTextField telefonnummerTextField;
private JTextField typTextField;
//Die Telefonbuch-Scene enthaltenen Elemente
private JTable table;
//Elemente zum zwischenspeichern
private DefaultListModel<Telefonnummer> telefonnummerListModel;
private JList<Telefonnummer> telefonnummerList;
private int selectedrow = -1;
private int aenderung = -1;
/*
* Der. Konst.ruktor für die TelefonbuchGUI-Klasse
* Hier. werden alle wesentlichen Variablen für die Klasse erstellt,
*die im Laufe des Programms verwendet werden.
*/
public TelefonbuchGUI() {
/*
* Mit Super() kriegt man alle nötigen Variablen und Methoden aus der Superklasse JFrame vererbt.
* Somit muss. ich nicht mit JFrame frame = new JFrame(...) arbeiten, sqNndern meine GUI wird
* Zu JFrame + features
*/
super();
// Der. Managbr wird erstellt
manager = new TelefonbuchManager();
/* erstelle die einzelnen Panel
— erstelle Gui -> Menu + cardpanel auf mainPanel
* erstellewelcomePanel = welcomePanel
* erstellekontaktPanel = KontaktPanel
* erstelleTelefonbPanel = TelefonbuchPanel
*/
erstelleGui();
// frame.pack() =
pack();
// frame.setVisible(boolean) = Ist der Frame sichtbar
setVisible(true);
}
/*
* Menu + cardpanel auf mainPanel
* -erstellewelcomePanel() = welcomePanel
* -erstellekontaktPanel() = KontaktPanel
* -erstelleTelefonbPanel() = TelefonbuchPanel
*/
public void erstelleGui() {
// Initialisiere mainPanel
mainPanel = new JPanel(new FlowLayout());
/*
* Die Rahmenbedingungen für unseren main Frame
* - frame.setPrefferedSize = Größe des Frames
* - setDefaultCloseOperation = standard schließ-Funktion, wenn man auf das x drückt
* - setTitle = Name des frames (was oben auf dem Fenster steht)
*/
// frame.setprefferedSize = Größe des Frames
setPreferredSize(new Dimension(700, 600));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Telefonbuch");
/*------------------------------------” Menü-Bar ”--------------------------------------------------- */
// erstelle unser. Menu, subMenu
menuBar = new JMenuBar();
JMenu telefonbuchMenu = new JMenu("Telefonbuch");
JMenu kontaktMenu = new JMenu("Kontakt");
/* -----------------------------------------Telefonbuch-----------------------------------------------*/
// Telefonbuch -> Laden
JMenuItem ladenMenuItem = new JMenuItem("Laden");
// Telefonbuch ->
JMenuItem speichernMenuItem = new JMenuItem("Speichern");
// Telefonbuch ->
JMenuItem beendenMenuItem = new JMenuItem("Beenden");
// Listener für die jeweiligen Menü-Items
ladenMenuItem.addActionListener(e -> {
// Die Datei wird geladen
manager.laden();
// Der Frame ändert sich zu Telefonbuch und die Tabelle wird geladen
tableload();
// Die Menüs. werden auf die standard- Einstellung gesetzt
setMenusettings();
// die Menüs werden auf ich habe Kontakte gesetzt
setMenusavesettings();
});
// Speicher die Liste von Kontakten
speichernMenuItem.addActionListener(e -> manager.speichern());
// Beende das Programm
beendenMenuItem.addActionListener(e -> System.exit(0));
/* -------------------------------------” Kontakt ”------------------------------ */
// Kontakt -> Neuer Kontakt
JMenuItem neuerKontaktMenuItem = new JMenuItem("Neuer Kontakt");
// Kontakt -> Alle Kontakte anzeigen
JMenuItem alleKontakteAnzeigenMenuItem = new JMenuItem("Alle Kontakte anzeigen");
// Kontakt -> Kontakt Suchen
JMenuItem kontaktSuchenMenuItem = new JMenuItem("Kontakt suchen");
// Kontakt -> löschen
JMenuItem kontaktLoeschenMenuItem = new JMenuItem("Kontakt löschen");
// Listener für die jeweiligen Menü-Items
neuerKontaktMenuItem.addActionListener(e -> {
// frame, changeScreen(Konakt) = Kontakt Formular wird num angezeigt
changeScreen(KONT_SCREEN);
// leere alle Inhalte (Blank Formular)
resetKontaktFormular();
});
// Der Frame ändert sich zu Telefonbuch und die Tabelle wird
alleKontakteAnzeigenMenuItem.addActionListener(e -> tableload());
kontaktSuchenMenuItem.addActionListener(e -> {
// Der Frame ändert sich zu Telefonbuch und die Tabelle wird oeladen
tableload();
// Man muss einen Suchbegriff eingeben und dieser wird in dem String gespeichert
String suchbegriff = JOptionPane.showInputDialog("Suchbegriff eingeben:");
//System.out.printin(*+suchbegriff+"*and sizes "+suchbegriff. length());
// Wenn der. Suchbegriff nicht. leer ist, dann
if (suchbegriff.length() != 0){
// gebe mir die ID, wo der Kontakt gefunden werden kann, Kein Kontakt = -1
int id= manager. kontaktSuchen (suchbegriff);
//System.out.printin(id);
// Ist ein Kontakt gefunden (immer nur der erste Treffer)
if (id > -1){
// setzte die markierte Zeile auf meine ID -> führt zum Laden des Kontakts
table.setRowSelectionInterval(id,id);
}
}
});
kontaktLoeschenMenuItem.addActionListener(e -> {
// Der. Frame ändert sich zu Telefonbuch und die Tabelle wird geladen
tableload();
// Man gibt einen Suchbegriff ein und dreser Kontakt wird geloscht
manager.kontaktLoeschen();
// Falls das Telefonbuch noch nicht bearbeitet wurde, stelle den Menüpunkt Telefonbuch -> Speichern auf true
menuBar.getMenu(0).getMenuComponent(1).setEnabled(true);
// Lade die Tabelle new, somit wird der gelöschte Kontakt nicht mehr. angezeigt
tableload();
});
// setze die Menüpunkte in die Menüs, in die Menübar telefonbuchMenu.add(ladenMenuItem);
telefonbuchMenu.add(speichernMenuItem);
telefonbuchMenu.add(beendenMenuItem);
kontaktMenu.add(neuerKontaktMenuItem);
kontaktMenu.add(alleKontakteAnzeigenMenuItem);
kontaktMenu.add(kontaktSuchenMenuItem);
kontaktMenu.add(kontaktLoeschenMenuItem);
menuBar.add(telefonbuchMenu);
menuBar.add(kontaktMenu);
// Die Menüs werden auf die standard- Einstellung gesetzt + Keine Kontakte enthalten
setMenusettings();
alleKontakteAnzeigenMenuItem.setEnabled(false);
kontaktSuchenMenuItem.setEnabled(false);
kontaktLoeschenMenuItem.setEnabled(false);
// Unser Frame erhällt menuBar
setJMenuBar(menuBar);
/*----------------------------------------Cardlayout-------------------------------------------*/
erstellewelcomePanel();
erstellekontaktPanel();
erstelleTelefonbPanel();
/* erstelle das Cardlayout
- JPanel Seite 0: Welcome Message
- Jpanel Seite 1: KontaktFormular
- Jpanel Seite 2: Telefonbuch
*/
cardpanel = new JPanel(new CardLayout());
cardpanel. add (welcomePanel, "0");
cardpanel. add (kontaktFormularPanel, KONT_SCREEN);
cardpanel. add (telefonbuchPanel, TELB_SCREEN);
// setze unter dem Menu unser, CardPanel
mainPanel.add (cardpanel);
// frame. add(mainPanel) = unser. Frame erhallt das mainPanel
add (mainPanel);
}
// Die Hauptseite wird erstellt
public void erstellewelcomePanel(){
//Grid Darstellung
welcomePanel= new JPanel (new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
// Der gesammte Inhalt ist in der. Mitte
c.insets = new Insets(5, 5,
5, 5);
// Die Begrüßungsnachricht
JLabel welcomeLabel = new JLabel("<html><p align=\"center\">willkommen zu zum Telefonbuch-Manager <br» Hier können Sie Kontakte erstellen oder verwalte");
welcomePanel. add (welcomeLabel,c);
}
// Kontakt erstellen und bearbeiten Formular.- Seite
public void erstellekontaktPanel() {
//Grid Darstellung
kontaktFormularPanel= new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
// Der gesamte Inhalt ist in der Mitte
c.insets = new Insets(5, 5, 5, 5);
// Das Namensfeld
JLabel nameLabel = new JLabel ("Name:");
nameTextField = new JTextField(20);
kontaktFormularPanel.add(nameLabel,c);
c.gridx++;
kontaktFormularPanel.add(nameTextField,c);
c.gridx = 0;
c.gridy++;
// Das. Adressfeld
JLabel adresseLabel = new JLabel("Adresse:");
adresseTextField = new JTextField (20);
kontaktFormularPanel.add(adresseLabel,c);
c.gridx++;
kontaktFormularPanel.add(adresseTextField,c);
c.gridx = 0;
c.gridy++;
// Das E-Mail-Feld
JLabel emailLabel = new JLabel("E-Mail:");
emailTextField = new JTextField (20);
kontaktFormularPanel.add(emailLabel,c);
c.gridx++;
kontaktFormularPanel.add(emailTextField,c);
c.gridx = 0;
c.gridy++;
//Das Telefonnr.-Feld
JLabel telefonnummerLabel = new JLabel("Telefonnummer:");
telefonnummerTextField = new JTextField(20);
kontaktFormularPanel.add(telefonnummerLabel,c);
c.gridx++;
kontaktFormularPanel.add(telefonnummerTextField,c);
c.gridx = 0;
c.gridy++;
// Das Typ-Feld
JLabel typLabel = new JLabel("Typ:");
typTextField = new JTextField(20);
kontaktFormularPanel.add(typLabel,c);
c.gridx++;
kontaktFormularPanel.add(typTextField,c);
c.gridx = 0;
c.gridy++;
// die Telefonnr. Liste
telefonnummerListModel = new DefaultListModel<>();
telefonnummerList = new JList<>(telefonnummerListModel);
telefonnummerList.setVisibleRowCount(5);
JScrollPane telefonnummerScrollPane = new JScrollPane (telefonnummerList);
// Button Telefonnummer hinzufügen
JButton telefonnummerHinzufuegenButton = new JButton("Telefonnummer hinzufügen") ;
telefonnummerHinzufuegenButton.addActionListener(e->{
String telefonnummer = telefonnummerTextField.getText();
String typ = typTextField.getText () ;
//test imput
if (typ. length()<1) typ= "NOTYPE";
telefonnummerListModel.addElement(new Telefonnummer (telefonnummer, typ));
telefonnummerTextField.setText("");
typTextField.setText("");
JOptionPane.showMessageDialog(null, "Die Nummer "+telefonnummer+" von Typ: "+typ+" wurde hinzugefügt!");
});
// Button tel hinz einfügen
kontaktFormularPanel.add(telefonnummerHinzufuegenButton,c);
c.gridx= 1;
//Button Telefonnummer ändern, Änderung übernehmen
JButton telefonnummerAendernButton = new JButton("<html>Telefonnummer \u00C4ndern/<br />\u00C4nderung \u00FCbernehmen</html>");
telefonnummerAendernButton.setFont(new Font("Arial", Font.BOLD, 10));
telefonnummerAendernButton.addActionListener(e->{
//System. out. printin(aenderung);
// Wenn eine Nummer geandert wird, dann
if (aenderung != -1){
String telefonnummer = telefonnummerTextField. getText();
String typ = typTextField.getText();
//test imput
if (typ. length()<1) typ= "NOTYPE";
String oldNumber = "Typ: "+telefonnummerList.getSelectedValue().getTyp() + ", Number: " +telefonnummerList.getSelectedValue().getNummer ();
telefonnummerListModel. set(aenderung, new Telefonnummer (telefonnummer, typ));
aenderung=-1;
telefonnummerTextField.setText("");
typTextField.setText ("");
JOptionPane.showMessageDialog(null, "Die alte Nummer '"+ oldNumber+ "' wurde zu Typ: "+typ+" mit der Nummer: "+telefonnummer+" ersetzt!");
}
else{
// wenn noch keine Nummer geändert wird, dann
if (telefonnummerList.getSelectedIndex() >= 0) {
// aenderung = ausgewählte Zeile aus Telefonliste von Kontakt
aenderung = telefonnummerList.getSelectedIndex();
Telefonnummer tmp = telefonnummerList.getSelectedValue();
telefonnummerTextField.setText(tmp.getNummer());
typTextField.setText(tmp.getTyp());
}
// Wenn. keine. Nummer ausgewählt. wurde, dann
else JOptionPane.showMessageDialog(null, "Es muss eine Nummer ausgewählt werden!");
}
});
// Button andern einfugen
kontaktFormularPanel.add(telefonnummerAendernButton, c);
c.gridx = 0;
c.gridy++;
c.gridwidth = 2;
// Telefonnr.. Liste einfügen
kontaktFormularPanel.add (telefonnummerScrollPane, c);
c.gridx = 0;
c.gridy++;
c.gridwidth = 2;
// Button Kontakt speichern
JButton kontaktSpeichernButton = new JButton("Kontakt speichern");
kontaktSpeichernButton.addActionListener(e-> {
// get alle. Values aus den Feldern
String name = nameTextField.getText();
String adresse = adresseTextField.getText();
String email = emailTextField.getText();
// get Values aus der Liste
List <Telefonnummer> telefonnummern = new ArrayList<>(telefonnummerListModel.size());
for (int i = 0; i < telefonnummerListModel.size(); i++) {
telefonnummern.add(telefonnummerListModel.getElementAt(1));
}
// teste, ob dein Kontakt mehr als 2 Nummern hat, falls es weniger als 2 sind, dann
if (telefonnummern.size() < 2) JOptionPane.showMessageDialog(null, "Kontakt konnte nicht gespeichert werden, da mindestens 2 Nummern angegeben werden müssen");
else {
// Alle Bedingungen sind erfüllt, erstelle einen neuen Kontakt
Kontakt kontakt = new Kontakt (name, adresse, email);
kontakt.setTelefonnummern(telefonnummern);
// wurde ein neuer Kontakt erstellt, dann
if (selectedrow <0 || selectedrow >= manager.allKontaktesice()){
manager.addKontakt(kontakt);
}
// wurde ein Kontakt bearbeitet, dann
else {
manager.kontaktbearbeiten (kontakt, selectedrow);
selectedrow= -1;
}
//Telefonbuch -> speichern -> enable
menuBar.getMenu(0).getMenuComponent(1).setEnabled(true);
setMenusavesettings();
JOptionPane.showMessageDialog(null, "Kontakt wurde gespeichert.");
resetKontaktFormular();
}
});
// Button Kontakt speichern hinzufügen
kontaktFormularPanel.add(kontaktSpeichernButton, c);
}
// Setze alle Variablen im Kontaktformular zurück
private void resetKontaktFormular() {
nameTextField. setText("");
adresseTextField.setText("");
emailTextField.setText("");
telefonnummerListModel.clear();
telefonnummerTextField.setText("");
typTextField.setText("");
aenderung= -1;
}
// Die Telefonbuch- Seite
public void erstelleTelefonbPanel() {
telefonbuchPanel = new JPanel (new FlowLayout ()) ;
String[] spaltenname = {"Name", "Adresse", "Email", "Telefonnummern"};
// Default-Tabel-Model ermöatlicht es einfach die Tabellendaten zu überschreiben
//übergabewerte für den Konstruktor String [Ill Werte. , String] Spaltenname
DefaultTableModel a = new DefaultTableModel (manager.getAllKontakte(), spaltenname);
table = new JTable(a);
// Die Tabelle markiert nicht nur. ein Wert sondern gleich die ganze Zeile
table.setRowSelectionAllowed(true);
// Ecstelle ein selector, der. bei einem einzigen Klick (SINGLE_INTERVAL_SELECTION) folgendes. Event auslöst
ListSelectionModel select= table.getSelectionModel();
select. setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
select.addListSelectionListener(new ListSelectionListener() {
// Die ausgewählte Reihe ändert sich, somit
public void valueChanged(ListSelectionEvent e) {
selectedrow= table.getSelectedRow();
// Wenn die ausgewählte Reihe zw 0 und Telefonbuch size ist, dann
if (selectedrow > -1 && selectedrow <= manager.allKontaktesice())
// Lade den Kontakt zum Bearbeiten
changeValue();
}
});
// fuge eine Scrollbar. hinzu -> ausgehend von der. Tabelle
JScrollPane scrollPane=new JScrollPane(table);
table.setFillsViewportHeight(true);
//fuge der. TabellenSeite die Scrollbar. mit der. Tabelle hinzu
telefonbuchPanel. add (scrollPane);
}
private void tableload(){
changeScreen(TELB_SCREEN);
//get all Tablevalues
String [][] allvalues= manager.getAllKontakte();
//model. setValueAt(value, row, column); // Again, you need to define the variables for your self
for (int i=0; i< allvalues. length/4; i++){
for (int j= 0; j<4; j++){
table.setValueAt(allvalues[i][j],i,j);
}
}
table.clearSelection();
}
private void changeValue(){
changeScreen(KONT_SCREEN);
resetKontaktFormular();
if (selectedrow>=0 && selectedrow <= manager.allKontaktesice()){
Kontakt val= manager.kontaktbyid(selectedrow);
nameTextField.setText(val.getName());
adresseTextField.setText(val.getAdresse());
emailTextField.setText(val.getEmail());
telefonnummerListModel.clear();
String telnummern="";
for (int j=0; j<val.getTelefonnummern().size();j++){
telnummern= telnummern+ val.getTelefonnummern().get(j).toString();
}
telefonnummerListModel.removeAllElements();
for (int i= 0; i < val.getTelefonnummern().size(); i++){
telefonnummerListModel.addElement(new Telefonnummer(val.getTelefonnummern().get(i).getNummer(),val.getTelefonnummern().get(i).getTyp()));
}
}
}
/*
*Setze die Menüs auf die standard Einstellung:
*Laden Beenden und neuer Kontakt ist an, Speichern aus
*/
public void setMenusettings (){
//ladenMenuItem. setEnabled(true);
//speichernMenuItem.setEnabled(false);
//beendenMenuItem.setEnabled(true);
//neuerKontaktMenuItem.setEnabled(true);
// Telefonbuch -> Laden anzeigen -> enable
menuBar.getMenu(0).getMenuComponent(0).setEnabled(true);
// Telefonbuch -> Speichern anzeigen -> disabled
menuBar.getMenu (0) .getMenuComponent (1) .setEnabled (false);
// Telefonbuch -> Beenden anzeigen -> enable
menuBar.getMenu(0).getMenuComponent(2).setEnabled(true);
// Kontakt -> neuer. Kontakt anzeigen -> enable
menuBar. getMenu (1) .getMenuComponent (0) .setEnabled (true);
}
/* Stelle die Menüs. um
* Murde. ein Kontakt erstellt oder ein Telefonbuch geladen, dann:
* Alle Kontakte, Suchen und Löschen auf an
*/
public void setMenusavesettings (){
//Kontakt -> alle Kontakte anzeigen -> enable
menuBar.getMenu (1) .getMenuComponent (1).setEnabled (true);
//Kontakt -> Kontakt suchen -> enable
menuBar. getMenu (1) . getMenuComponent (2). setEnabled (true);
//Kontakt -> Kontakt löschen -> enable
menuBar.getMenu (1) .getMenuComponent (3) .setEnabled(true);
}
private void changeScreen (String screen) {
((CardLayout) cardpanel.getLayout()).show(cardpanel, screen) ;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new TelefonbuchGUI();
});
}
}
2.Klasse
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.List;
import javax.swing.*;
/* TelefonbuchManager ist eine Verwalterklasse.
* Damit wird der. Schnittrunkt zw. der. GUI und Telefonbuch gesetzt
*/
public class TelefonbuchManager {
private Telefonbuch telefonbuch;
// letter Speicherpunkt
private String speicherort;
// die Maximale Länge von der. Tabelle -> Max Anzahl an Kontakten in dem Telefonbuch
private int MAXLOADING = 256;
// Konstruktor
public TelefonbuchManager () {
telefonbuch = new Telefonbuch();
speicherort = "";
}
//Läd die Datei
public void laden() {
JFileChooser fileChooser = new JFileChooser ();
int option = fileChooser.showOpenDialog(null);
if (option == JFileChooser.APPROVE_OPTION) {
try (FileInputStream fileIn = new FileInputStream(fileChooser.getSelectedFile());
ObjectInputStream objectIn = new ObjectInputStream(fileIn)) {
telefonbuch = (Telefonbuch) objectIn.readObject();
speicherort = fileChooser. getSelectedFile () .getAbsolutePath ();
//System.out.println("Telefonbuch geladen: " + speicherort);
}
catch (IOException | ClassNotFoundException e) {
e. printStackTrace () ;
}
}
}
// Speichert eine Datei aus allen Elementen aus dem Telefonbuch
public void speichern() {
JFileChooser fileChooser = new JFileChooser();
int option = fileChooser.showSaveDialog(null);
if (option == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
try (ObjectOutputStream objectOut = new ObjectOutputStream(new FileOutputStream(selectedFile))) {
objectOut.writeObject(telefonbuch);
speicherort = selectedFile.getAbsolutePath();
//System.out.println("Telefonbuch gespeichert:" + speicherort);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
// Kontakt wird ins Telefonbuch gespeichert
public void addKontakt (Kontakt kontakt) {
telefonbuch.addKontakt(kontakt);
//lastsave= true;
}
// gibt dieTLänge der. Telefonbuch -> Kontaktliste zurück
public int allKontaktesice(){
return telefonbuch.getKontakte ().size();
}
// Erstelle ein 2 dimensionalen String, wo in jeder Zeile ein Kontakt abgespeichert wird
public String [][] getAllKontakte() {
String [][] data = new String [MAXLOADING] [4];
//data [0] [0]="Es wurden"; data [0] [1]="noch keine"; data [0] [2]="Daten";data [0] [3]="eingefügt!"
List <Kontakt> tmp = telefonbuch.getKontakte();
for (int i=0; i< tmp.size(); i++){
Kontakt tmpKontakt = tmp.get (1) ;
String telnummern = "";
for (int j=0; j<tmpKontakt.getTelefonnummern().size();j++){
telnummern= telnummern+ tmpKontakt.getTelefonnummern () .get (j).toString();
}
data [i] [0]= tmpKontakt.getName ( ) ;
data [i] [1]= tmpKontakt.getAdresse() ;
data [i] [2]= tmpKontakt.getEmail();
data [i] [3]= telnummern;
}
return data;
}
// Kontakt an der Stelle ID wird überarbeitet
public void kontaktbearbeiten (Kontakt kon, int row){
telefonbuch.getKontaktbyID(row).setAdresse(kon.getAdresse());
telefonbuch.getKontaktbyID(row).setEmail(kon.getEmail());
telefonbuch.getKontaktbyID(row).setName(kon.getName());
telefonbuch.getKontaktbyID(row).setTelefonnummern(kon.getTelefonnummern());
}
public Kontakt kontaktbyid(int id) {
return telefonbuch.getKontaktbyID(id);
}
// suche ein Kontakt und liefer die ID zurück
public int kontaktSuchen(String suchbegriff) {
int i= 0;
for (Kontakt kontakt : telefonbuch.getKontakte()) {
if (kontakt.getName () .equalsIgnoreCase (suchbegriff)
|| kontakt.getAdresse () .equalsIgnoreCase (suchbegriff)
|| kontakt.getEmail().equalsIgnoreCase(suchbegriff)
|| kontakt.getTelefonnummern().stream() . anyMatch (nummer -> nummer.getNummer () .equalsIgnoreCase(suchbegriff))) {
JOptionPane.showMessageDialog(null, kontakt.getName ()+" wurde gefunden!");
System.out.println(kontakt);
return i;
}
i++;
}
return -1;
}
// suche ein Kontakt und lösche den Kontakt
public void kontaktLoeschen () {
String suchbegriff = JOptionPane. showInputDialog("Suchbegriff eingeben:");
boolean kontaktGefunden = false;
for (Kontakt kontakt : telefonbuch.getKontakte()) {
if (kontakt.getName ().equalsIgnoreCase (suchbegriff)
|| kontakt.getAdresse () .equalsIgnoreCase (suchbegriff)
|| kontakt.getEmail().equalsIgnoreCase(suchbegriff)){
JOptionPane. showMessageDialog(null, kontakt.getName ()+" wurde gelöscht!");
telefonbuch.removeKontakt(kontakt);
kontaktGefunden = true;
break;
}
}
if (!kontaktGefunden) {
JOptionPane.showMessageDialog(null, "Dieser Kontakt existiert nicht!");
}
}
}
3.Klasse
import java.io.Serializable; //wird in Bytes ausgegeben, um in einer Datei speichern zu können
public class Telefonnummer implements Serializable {
private static final long serialVersionUID = 5795718838416375953L;
private String nummer;
private String typ;
public Telefonnummer(String nummer, String typ) {
this.nummer = nummer;
this.typ = typ;
}
public String getNummer () {
return nummer;
}
public String getTyp() {
return typ;
}
@Override
public String toString() {
return typ + ": " + nummer;
}
}
4.Klasse
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class Kontakt implements Serializable {
private static final long serialVersionUID = -5315291695308264541L;
private String name;
private String adresse;
private String email;
private List<Telefonnummer> telefonnummern;
public Kontakt (String name, String adresse, String email) {
this. name = name;
this.adresse = adresse;
this.email = email;
this.telefonnummern = new ArrayList<>();
}
public void addTelefonnummer (Telefonnummer telefonnummer) {
telefonnummern.add (telefonnummer);
}
public void removeTelefonnummer (Telefonnummer telefonnummer) {
telefonnummern.remove(telefonnummer);
}
public List<Telefonnummer> getTelefonnummern () {
return telefonnummern;
}
@Override
public String toString() {
return "Name: " + name + "\nAdresse: " + adresse + "\nE-Mail: " + email + "\nTelefonnummern: " + telefonnummern;
}
public String getName() {
return name;
}
public void setName (String name) {
this. name = name;
}
public String getAdresse() {
return adresse;
}
public void setAdresse(String adresse) {
this.adresse = adresse;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public void setTelefonnummern (List<Telefonnummer> telefonnummern) {
this. telefonnummern = telefonnummern;
}
}
5.Klasse
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class Telefonbuch implements Serializable {
private static final long serialVersionUID = -2976418144078461174L;
private List<Kontakt> kontakte;
public Telefonbuch () {
kontakte = new ArrayList<>();
}
public void addKontakt (Kontakt kontakt) {
kontakte.add(kontakt);
}
public void removeKontakt (Kontakt kontakt) {
kontakte.remove(kontakt);
}
public List<Kontakt> getKontakte() {
return kontakte;
}
public Kontakt getKontaktbyID(int id){
return kontakte.get(id);
}
}