Daten.java

/*
 *     YAV (Yet another Visualiser)
 *     (c) 2004 by Robin Quast
 *    Version 1.0 (04.03.2004)
 *    
 *  erstellt im Rahmen der Diplomarbeit
 * "Theorie und Java- Realisierung
 *  ausgewählter Algorithmen zur
 *  Bestimmung kürzester Wege in Graphen"
 *
 *  betreut durch Prof. Dr. Lenze
 *  an der Fachhochschule Dortmund
 *  im SS 2003/ WS 2003/2004
 *
 *  @(#)Daten.java  1.0 04/03/09
 */
import javax.swing.*;
import java.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.util.Enumeration;
import java.lang.Math;
import java.util.Collections;
import java.awt.geom.*;
import java.awt.print.PrinterJob;
import java.awt.print.*;
import javax.swing.event.*;
import java.io.*;
import javax.swing.table.*;

/** Diese Klasse dient zur Darstellung der Adjazenzliste und der Adjazenzmatrix in 
 * einen JPanel. Die Adjazenzmatrix und die Adjazenzliste werden in einem JSplitPane
 * angezeigt.
 */
public class Daten
extends JPanel
implements TableModelListener {

  AdjazenzlistenViewer ad_view = null;
  AdjazenzmatrixTable ad_table = null;
  Adjazenzmatrix ad_matrix = new Adjazenzmatrix();
  AdjazenzmatrixTableModel ad_table_model = new AdjazenzmatrixTableModel();
    
  /** Leerer Kónstruktor.
   */
  public Daten() {
  }
  
  /** Konstruktor, der die Adjazenzliste übernimmt.
   */
  public Daten(Adjazenzliste adlist) {      
    setLayout(new BorderLayout());

    JPanel oben = new JPanel();  
    ad_view = new AdjazenzlistenViewer(adlist.toHtml());
    ad_view.setToolTipText("Adjazenzlistendarstellung");
    
    JLabel l_adl=new JLabel("Adjazenzliste");
    l_adl.setAlignmentX(Component.CENTER_ALIGNMENT);
    
    oben.setLayout(new BoxLayout(oben,BoxLayout.Y_AXIS));
    oben.add(l_adl);
    oben.add(ad_view);
    
    JPanel unten = new JPanel();
    ad_table= new AdjazenzmatrixTable(ad_table_model);
    ad_table.setToolTipText("Adjazenzmatrixdarstellung");
    ad_table_model.addTableModelListener(ad_table);
    JScrollPane ad_scrollPane = new JScrollPane(ad_table);
    ad_scrollPane.setAlignmentX(Component.CENTER_ALIGNMENT);
    
    JLabel l_adm =new JLabel("Adjazenzmatrix")
    l_adm.setAlignmentX(Component.CENTER_ALIGNMENT);
    
    
    unten.setLayout(new BoxLayout(unten,BoxLayout.Y_AXIS));
    unten.add(l_adm,BorderLayout.NORTH);
    unten.add(ad_scrollPane,BorderLayout.CENTER);    
    
      JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, oben, unten);
        splitPane.setContinuousLayout(true);
    splitPane.setOneTouchExpandable(true);
    add(splitPane,BorderLayout.CENTER);
  }
  
  /** Setzt den Text der Adjazenzliste. Dieser muss im HTML Code als String 
   * üebergebene werden.
   */
  public void setAdjazenzlistenText(String text) {
    ad_view.setText(text);
  }
  
  /** Setzt die Adjazenzmatrix, die sich aus der Adjazenzliste ergibt.
   */
  public void setAdjazenzmatrix(Adjazenzliste al) {
    int maxnnum =al.getMaxNodeNumber();
    Object[] colnames=new String[maxnnum+1];
      for (int i = 0; i < maxnnum+1; ++i) {
        colnames[i]=new String (""+i);
    }
    ad_matrix.setAdjazenzmatrix(al);
    Object[][] data = new Object[ad_matrix.getRows()][ad_matrix.getColumns()];
    for (int i=0;i<ad_matrix.getRows();i++) {
      for (int j=0;j<ad_matrix.getColumns();j++) {
        if (ad_matrix.getValue(i,j)!=Integer.MAX_VALUEdata[i][j]=new Integer(ad_matrix.getValue(i,j));
      }
    
    ad_table_model.setDataVector(data, colnames)
    ad_table.setColumnSelectionAllowed(true);  
    
    ad_table.setToolTipText("Adjazenzmatrixdarstellung");
    repaint();
  }
  
  /** Eventhandling, wenn sich die Tabelle der Adjazenzmatrix &auml;ndert.
   */
    public void tableChanged(TableModelEvent e) {
      
      repaint();
    }
}