import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
class Namensliste
{
public static void main(String [] args)
{
SwingFenster sfenster = new SwingFenster();
sfenster.setSize(650, 400);
sfenster.show();
} //end of main
} //end of class Namensliste
class SwingFenster extends JFrame
{
JFrame fenster = null;
String
lafName1 = "javax.swing.plaf.metal.MetalLookAndFeel",
lafName2 = "com.sun.java.swing.plaf.motif.MotifLookAndFeel",
lafName3 = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
ImageIcon icon = new ImageIcon("engel.gif");
JTabbedPane tabbedPane;
JPanel[] pnlMain = new JPanel[Daten.getInstance().getListeNamen().length];
int selectedIndex = 0;
JList selectedListe = null;
String selectedName = null;
//Default-Konstruktor
public SwingFenster()
{
this("*** Namensliste *** Version 3.2.1 *** D E N I S P I N Z K E");
}//end of Konstruktor
//Konstruktor mit Parametern
public SwingFenster(String titelleiste)
{
super (titelleiste);
fenster = this;
Container cPane = this.getContentPane();
try
{
UIManager.setLookAndFeel(lafName3);
}
catch(Exception exp)
{
System.out.println("Fehler beim Darstellen von Look&Feel" + exp.getMessage());
}
this.setJMenuBar(new MenuLeiste());
tabbedPane = new JTabbedPane();
for(int i = 0; i < Daten.getInstance().getListeNamen().length; i++)
{
pnlMain[i] = erstellePnlMain(i);
tabbedPane.addTab(((JListData)Daten.getInstance().getListeNamen()[i].getModel()).getTitel(), icon, pnlMain[i]);
}
cPane.add(tabbedPane);
}//end of Konstruktor
class MenuLeiste extends JMenuBar
{
private JMenuItem
mItemDatenquelle = new JMenuItem("Datenquelle öffnen"),
mItemSpeichern = new JMenuItem("speichern"),
mItemBeenden = new JMenuItem("Beenden"),
mItemEinlesen = new JMenuItem("einfügen"),
mItemLoeschen = new JMenuItem("löschen"),
mItemAendern = new JMenuItem("ändern");
public MenuLeiste()
{
JMenu menuDatei = new JMenu();
menuDatei.setText("Datei");
menuDatei.add(mItemDatenquelle);
menuDatei.add(mItemSpeichern);
menuDatei.add(mItemBeenden);
this.add(menuDatei);
JMenu menuNamen = new JMenu();
menuNamen.setText("Namen");
menuNamen.add(mItemEinlesen);
menuNamen.add(mItemLoeschen);
menuNamen.add(mItemAendern);
this.add(menuNamen);
//Listener anbinden für das Menu
mItemDatenquelle.addActionListener(new ActionAdapterMenu());
mItemSpeichern.addActionListener(new ActionAdapterMenu());
mItemEinlesen.addActionListener(new ActionAdapterMenu());
mItemLoeschen.addActionListener(new ActionAdapterMenu());
mItemAendern.addActionListener(new ActionAdapterMenu());
mItemBeenden.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ev)
{
System.exit(0);
}
});
}
class ActionAdapterMenu implements ActionListener
{
public void actionPerformed(ActionEvent ev)
{
Object quelle = ev.getSource();
if(quelle == mItemDatenquelle)
{
Fenster_Methoden fm = new Fenster_Methoden();
getClass().getResource ("coke.mid");
String datei = fm.dateiName();
System.out.println("\nDatei :" + datei);
fm.leseDatei(datei);
}
else if (quelle == mItemSpeichern)
{
Fenster_Methoden fm = new Fenster_Methoden();
String datei = fm.dateiName();
fm.schreibeDatei(datei);
}
else if(quelle == mItemEinlesen)
{
EingabeFenster fenster = new EingabeFenster(EingabeFenster.MODUS_NEU,0);
fenster.pack();
fenster.show();
}
else if(quelle == mItemLoeschen)
{
}
else if(quelle == mItemAendern)
{
EingabeFenster fenster = new EingabeFenster(EingabeFenster.MODUS_AENDERN,tabbedPane.getSelectedIndex());
fenster.pack();
fenster.show();
}
}
} //end of ActionAdapterMenu--------------------------------------------
} //end of MenuLeiste
//--------------------------------------------------------------------------
protected JPanel erstellePnlMain(int index)
{
JPanel pnlListe = new JPanel(false);
JList listeNamen[] = Daten.getInstance().getListeNamen();
JScrollPane scrollPane = new JScrollPane(Daten.getInstance().getListeNamen()[index]);
scrollPane.setPreferredSize(new Dimension(450, 300));
listeNamen[index].addListSelectionListener(new ListSelectionAdapter(Daten.getInstance().getListeNamen()[index]));
pnlListe.add(scrollPane);
return pnlListe;
}
// innere Klassen ----------------------------------------------------------
class ListSelectionAdapter implements ListSelectionListener
{
JList meineListe;
public ListSelectionAdapter(JList liste)
{
meineListe = liste;
}
public void valueChanged( ListSelectionEvent ev )
{
System.out.println("Wert verändert");
if(ev.getValueIsAdjusting() == false)
{
// Name merken
selectedName = (String)meineListe.getSelectedValue();
System.out.println("ausgewähltes Feld= " + selectedName);
// Index merken
selectedIndex = meineListe.getSelectedIndex();
System.out.println("ausgewählter Index= " + selectedIndex);
// Liste merken
selectedListe = meineListe;
}
}
}
} //end of class SwingFenster
//------------------------------------------------------------------------------
class Fenster_Methoden extends JFrame
{
public String dateiName()
{
JFileChooser fChooser = new JFileChooser();
String gewaehlteDatei = "";
int returnVal = fChooser.showOpenDialog(Fenster_Methoden.this);
if (returnVal == JFileChooser.APPROVE_OPTION)
{
gewaehlteDatei = fChooser.getSelectedFile().getName();
}
else
{
System.out.println("\nAuswahl der Datei wurde abgebrochen");
}
return gewaehlteDatei;
} // end of dateiName
public void leseDatei(String dateiname)
{
BufferedReader in;
String zeile;
try
{
in = new BufferedReader(new FileReader(new File(dateiname)));
Daten data = Daten.getInstance();
while((zeile = in.readLine()) != null)
{
for(int i = 0; i < data.getListeNamen().length;i++)
{
char c = zeile.charAt(0);
JListData mdl = (JListData)data.getListeNamen()[i].getModel();
if (mdl.getTitel().indexOf(c) != -1)
mdl.addElement(zeile);
}
}
in.close();
for (int i = 0; i < data.getListeNamen().length;i++)
{
JListData mdl = (JListData)data.getListeNamen()[i].getModel();
mdl.sortiereVector();
}
}
catch(IOException exp)
{
System.out.println("Fehler beim Lesen der Datei " + exp.getMessage());
}
}//end of leseDatei
public void schreibeDatei(String dateiname)
{
PrintWriter out;
try
{
out = new PrintWriter(new FileWriter(new File(dateiname)));
Daten data = Daten.getInstance();
System.out.println(">>> fn = "+dateiname);
for(int i=0; i < data.getListeNamen().length; i++)
{
JListData jldata = (JListData)data.getListeNamen()[i].getModel();
for (int j=0; j < jldata.getSize(); j++)
{
out.println((String)jldata.getElementAt(j));
}
}
out.flush();
out.close();
System.out.println("Datei wurde geschrieben");
}
catch (Exception exp)
{
exp.printStackTrace();
}
} // end of schreibeDatei
}//end of class Fenster_Methoden
//------------------------------------------------------------------------------
class EingabeFenster extends JFrame
{
//Membervariablen
JFrame fenster = null;
JLabel lbName;
JTextField tfName;
JButton
buttonOk,
buttonAbbrechen;
String
lafName1 = "javax.swing.plaf.metal.MetalLookAndFeel",
lafName2 = "com.sun.java.swing.plaf.motif.MotifLookAndFeel",
lafName3 = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
int modus;
int index;
public static final int MODUS_NEU = 1;
public static final int MODUS_AENDERN = 2;
//Default-Konstruktor
public EingabeFenster(int modus, int index)
{
//Titelleiste
this("*** Bitte geben Sie die Werte ein ***",index, modus);
}//end of Konstruktor
//Konstruktor mit Parametern
public EingabeFenster(String titelleiste, int index, int modus)
{
//Titelleiste
super (titelleiste);
fenster = this;
this.modus = modus;
this.index = index;
Container cPane = this.getContentPane();
//look & feel festlegen (Style für die Komponenten)
//innerhalb eines Try-Catch, damit der Fehler abgefangen wird
try
{
UIManager.setLookAndFeel(lafName3);
}
catch(Exception exp)
{
System.out.println("Fehler beim Darstellen von Look&Feel" + exp.getMessage());
}
//Komponenten
//----------------------------------------------------------------------
//TabbedPane
JPanel panel = new JPanel();
lbName = new JLabel("Name:Vorname");
panel.add(lbName);
tfName = new JTextField(20);
if (modus == MODUS_AENDERN)
{
int i = Daten.getInstance().getListeNamen()[index].getSelectedIndex();
if (i != -1)
{
tfName.setText((String)((JListData)Daten.getInstance().getListeNamen()[index].getModel()).getElementAt(i));
}
else
{
System.out.println("funktioniert nicht!");
}
}
panel.add(tfName);
buttonOk = new JButton("OK");
panel.add(buttonOk);
buttonAbbrechen = new JButton("Abbrechen");
panel.add(buttonAbbrechen);
cPane.add(panel);
buttonOk.addActionListener(new ActionAdapterButtons());
buttonAbbrechen.addActionListener(new ActionAdapterButtons());
}//end of Konstruktor
class ActionAdapterButtons implements ActionListener
{
public void actionPerformed(ActionEvent ev)
{
Object quelle = ev.getSource();
if(quelle == buttonOk)
{
System.out.println("Button Ok gedrueckt");
JList[] listeNamen = Daten.getInstance().getListeNamen();
if (modus == MODUS_NEU)
{
for (int i=0; i < listeNamen.length; i++)
{
if (((JListData)listeNamen[i].getModel()).getTitel().indexOf(tfName.getText().charAt(0)) != -1)
((JListData)listeNamen[i].getModel()).addElement(tfName.getText());
}
}
else if (modus == MODUS_AENDERN)
{
int i = Daten.getInstance().getListeNamen()[index].getSelectedIndex();
((JListData)listeNamen[index].getModel()).changeElement(i,tfName.getText());
}
}
else if(quelle == buttonAbbrechen)
{
System.out.println("Button Abbrechen gedrueckt");
fenster.setVisible(false);
}
}
}
}//end of class EingabeFenster
//------------------------------------------------------------------------------
class JListData extends AbstractListModel
{
Vector dlistSort;
String titel;
public JListData(String text)
{
dlistSort = new Vector();
titel = text;
sortiereVector();
}
public void addElement (String s)
{
dlistSort.addElement(s);
fireIntervalAdded(this, dlistSort.size()-1, dlistSort.size());
}
public void removeElementAt(int index)
{
}
public void removeAllElements()
{
dlistSort.removeAllElements();
fireIntervalRemoved(this, 0, dlistSort.size());
}
public void changeElement(int index,String s)
{
dlistSort.set(index,s);
fireContentsChanged(this,index,index);
}
public Object getElementAt (int index)
{
return dlistSort.elementAt(index);
}
public int getSize()
{
return dlistSort.size();
}
public void sortiereVector()
{
// Sortierung ---------------------
Object[] arrayNamen = dlistSort.toArray();
Arrays.sort(arrayNamen);
dlistSort.clear();
// und sortiert in Datenspeicher ablegen
for(int i = 0; i < arrayNamen.length; i++)
{
dlistSort.addElement((String) arrayNamen[i]);
}
}
public String getTitel()
{
return titel;
}
}//end of class JListData
//-----------------------------------------------------------------------------
class Daten //die legt ein Objekt von JList Array an und übergibt die Beschriftung der Reiter der Tabbedpane
{
static Daten hugo = null;
String[] reiter =
{"ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"};
JList[] listeNamen = new JList[reiter.length];
Daten()
{
for (int i=0; i < listeNamen.length; i++)
{
JListData dataModel = new JListData(reiter[i]);
listeNamen[i] = new JList(dataModel);
listeNamen[i].setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
}
}
public static Daten getInstance()
{
if (hugo == null)
hugo = new Daten();
return hugo;
}
public JList[] getListeNamen()
{
return listeNamen;
}
} // end of class Daten