public class DateienEinlesen extends JFrame {
private static final long serialVersionUID = 5939729178368289077L;
protected JTree jt;
protected DefaultTreeModel jtm;
private VerwaltungsIO vwio;
private VerwaltungsIO parent;
private Katalog topLevelKatalog;
public static JTextArea BESCHREIBUNGS_FENSTER;
private DateienEinlesen derFrame = null;
private Knoten zuletztKopierterKnoten;
public DateienEinlesen() {
super("Verzeichnisinhalte!");
derFrame = this;
}
public static void main(String[] args) {
DateienEinlesen de = new DateienEinlesen();
de.init(args);
de.setVisible(true);
}
private void init(String args[]) {
this.setSize(500, 400);
this.addWindowListener(new DateienEinlesenEventHandler());
if (args.length < 1) {
System.out.println("Verzeichnisliste und Katalog fehlen!");
System.exit(-1);
} else {
vwio = new VerwaltungsIO(args[0]);
if (args.length > 1) {
// Katalog aus Verzeichnissen initialisieren
topLevelKatalog = new Katalog("StartKatalog");
for (int i = 0; i < args.length; i++) {
vwio.baumEinlesen(topLevelKatalog, args[i]);
}
vwio.speichern(topLevelKatalog);
} else {
// bereits serialisierten Katalog lesen
topLevelKatalog = (Katalog) vwio.lesen();
}
if (topLevelKatalog != null) {
initContentPane();
initMenuBar();
} else {
System.exit(-1);
}
}
}
private void initMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu katMenu = new JMenu("KatalogVerwaltung");
//BEGINN Aufgabe3
JMenu closeMenu = new JMenu("Operationen");
//ENDE Aufgabe3
MenuItemHandler mih = new MenuItemHandler();
katMenu.add(this.createNewMenuItem(Konstanten.NeuKatalog, mih));
katMenu.add(this.createNewMenuItem(Konstanten.NeuBild, mih));
katMenu.add(this.createNewMenuItem(Konstanten.NeuTon, mih));
katMenu.add(this.createNewMenuItem(Konstanten.Kopie, mih));
katMenu.add(this.createNewMenuItem(Konstanten.Entfernen, mih));
katMenu.add(this.createNewMenuItem(Konstanten.Eintragen, mih));
katMenu.add(this.createNewMenuItem(Konstanten.Modifizieren, mih));
// trage Menu in Menu-Balken ein
menuBar.add(katMenu);
// trage Menu-Balken in den aktuellen JFrame ein
this.setJMenuBar(menuBar);
}
private void initContentPane() {
jtm = new DefaultTreeModel(topLevelKatalog);
jt = new JTree(jtm);
// parametrisiere den Tree: editierbar und
// immer nur ein Knoten selektierbar
jt.setEditable(true);
jt.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
jt.addMouseListener(new TreeHandlerMaus());
jt.addKeyListener(new TreeHandlerTastatur());
// der Tree soll in einem Scrollable Fenster liegen,
// da man nie weiss, wie groß der Baum wird.
JScrollPane scrPane = new JScrollPane();
scrPane.getViewport().add(jt);
this.getContentPane().setLayout(new java.awt.BorderLayout());
// trage JScrollPane mit dem JTree in die Mitte des Layouts ein.
this.getContentPane().add(java.awt.BorderLayout.CENTER, scrPane);
// erzeuge Beschreibungsfenster (JTextArea)
// ebenfalls in einem Scrollable Fenster und füge
// dieses unterhalb der JTree-Pane ein.
BESCHREIBUNGS_FENSTER = new JTextArea(
"Hierhin kommt die Beschreibung des \n"
+ "zuletzt ausgegebenen Dokuments!");
scrPane = new JScrollPane();
scrPane.getViewport().add(BESCHREIBUNGS_FENSTER);
this.getContentPane().add(java.awt.BorderLayout.SOUTH, scrPane);
}
private JMenuItem createNewMenuItem(String name, MenuItemHandler mih) {
JMenuItem result = new JMenuItem(name);
result.addActionListener(mih);
return result;
}
public class TreeHandlerTastatur extends KeyAdapter {
/*
* (non-Javadoc)
*
* @see java.awt.event.KeyAdapter#keyPressed(java.awt.event.KeyEvent)
*/
//@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
JTree jt = (JTree) e.getComponent();
if (jt.getSelectionCount() == 1) {
// es ist ein Element selektiert
TreePath selPath = jt.getSelectionPath();
Knoten kn = (Knoten) selPath.getLastPathComponent();
if (kn instanceof Dokument) {
((Dokument) kn).ausgeben();
}// else: bei Katalogen passiert nichts
}
}
}
}
public class TreeHandlerMaus extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
JTree jt = (JTree) e.getComponent();
int selRow = jt.getRowForLocation(e.getX(), e.getY());
TreePath selPath = jt.getPathForLocation(e.getX(), e.getY());
// es wurde tatsächlich ein Eintrag selektiert
if (selRow != -1) {
// es soll tatsächlich etwas passieren:
if (e.getClickCount() == 2) {
Knoten kn = (Knoten) selPath.getLastPathComponent();
if (kn instanceof Dokument) {
((Dokument) kn).ausgeben();
}// else: bei Katalogen passiert nichts
}
}
}
}
public class DateienEinlesenEventHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {
// speichere ggf. geänderte Daten im Katalog
// topLevelKatalog bleibt unverändert der Wurzelknoten
if (vwio != null)
vwio.speichern(topLevelKatalog);
// beende Fensterausgabe
e.getWindow().setVisible(false);
e.getWindow().dispose();
// beende Applikation
System.exit(0);
}
}
private void admAndInsert(Knoten kn, Knoten neuDok) {
Administration adm = new Administration(derFrame, neuDok);
if (adm.werteGeaendert()) {
// trage neuen Knoten ins TreeModel ein, dabei wird automatisch
// der JTree über Veränderungen informiert.
jtm.insertNodeInto(neuDok, kn, kn.getChildCount());
// mache Änderung sichtbar
jt.scrollPathToVisible(new TreePath(kn.getPath()));
}
}
class MenuItemHandler implements ActionListener{
public void actionPerformed (ActionEvent e){
String actionCommand = e.getActionCommand();
TreePath selPath = jt.getSelectionPath();
if(selPath != null){
Knoten kn = (Knoten)selPath.getLastPathComponent();
if(actionCommand.equals(Konstanten.NeuKatalog)){
if(kn instanceof Katalog){
Katalog neuDok = new Katalog("");
Administration adm = new Administration(derFrame, neuDok);
if(adm.werteGeaendert()){
jtm.insertNodeInto(neuDok, kn, kn.getChildCount());
jt.scrollPathToVisible(new TreePath(kn.getPath()));
}
}else{
DateienEinlesen.BESCHREIBUNGS_FENSTER.setText("Neuer Katalog kann nur in einem Katalog angelegt werden!");
}
}else
if(actionCommand.equals(Konstanten.NeuBild)){
if(kn instanceof Katalog){
Dokument neuDok = new BildDokument("", "", "");
Administration adm = new Administration(derFrame, neuDok);
if(adm.werteGeaendert()){
jtm.insertNodeInto(neuDok, kn, kn.getChildCount());
jt.scrollPathToVisible(new TreePath(kn.getPath()));
}
usw.