de.bsvrz.pat.sysbed.dataview
Class DataViewPanel

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by de.bsvrz.pat.sysbed.dataview.DataViewPanel
All Implemented Interfaces:
DataViewListener, ImageObserver, MenuContainer, Serializable, Accessible

public class DataViewPanel
extends JPanel
implements DataViewListener

Dieses Panel stellt die Datensätze, die das Model übergibt, in einem ScrollPane dar. Mit dem Konstruktor wird ein baumartiger Header erstellt, dessen Spaltenbreiten durch Schieberegler verändert werden kann. Damit dies funktioniert, muss nachdem der Header erzeugt und dieser angezeigt (z.B. durch validate() oder durch Frame.setVisible()) wird mit der Methode initHeaderSize() initialisiert werden.

Author:
Kappich Systemberatung
See Also:
Serialized Form

Nested Class Summary
private  class DataViewPanel.VerticalScrollBarAdjustmentListener
          Wird benötigt, um das Scrollverhalten des vertikalen Scrollbalkens zu steuern.
 
Nested classes/interfaces inherited from class javax.swing.JPanel
JPanel.AccessibleJPanel
 
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
private  AttributeGroup _attributeGroup
          speichert die Attributgruppe
private  List<Dataset> _datasets
          speichert alle Datensätze, die von der Applikation gesendet wurden
private  DataViewModel _dataViewModel
          speichert eine Instanz des DataViewModel
private  Debug _debug
          Der Debug-Logger
private  int _firstRow
          Gibt den ersten Datensatz an, der angezeigt wird.
private  boolean _firstRun
          merkt sich, ob es sich um den ersten Aufruf handelt
private  HeaderGrid _head
          speichert die Sruktur des Headers
private  JScrollPane _headerScrollPane
          speichert das dargestellte ScrollPane
private  int _lastRow
          Gibt den letzten Datensatz an, der angezeigt wird.
private  JPanel _lowerRowHeaderPanel
          der untere Platzhalter des Zeilenheaders
private  JPanel _lowerViewportPanel
          der untere Platzhalter des Viewports
private  JPanel _rowHeaderPanel
          der sichtbare Teil des Zeilenheaders
private  int _rowHeaderWidth
          Gibt die Breite des Zeilenheaders zurück.
private  int _screenHeight
          die sichtbare Höhe des Viewports
private  JPanel _upperRowHeaderPanel
          der obere Platzhalter für den Zeilenheader
private  JPanel _upperViewportPanel
          der obere Platzhalter für den Viewport
private  JScrollBar _verticalScrollBar
          speichert den vertikalen Scrollbalken
private  JPanel _viewportPanel
          der sichtbare Teil des Viewports
private  String TIME_FORMAT
          speichert das Zeitformat für die Spalte 'Zeit'
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
DataViewPanel(DataViewModel model)
          Konstruktor.
 
Method Summary
 void addDataset(int index, DataTableObject dataTableObject)
          Fügt einen Datensatz an eine bestimmte Position der bisherigen Datensätze ein.
 void addDatasets(List<DataTableObject> dataTableObjects)
          Fügt eine beliebige Anzahl neuer Datensätze an die bestehenden Datensätze hinten an.
private  boolean checkRowHeight()
          Prüft, wieviel Platz die Komponente in der Höhe verbraucht und ob sie noch in der ScrollPane angezeigt werden kann.
private  void createAndShowGui()
          Erstellt die Elemente für das Panel und ordnet diese an.
private  JPanel createColumnHeader()
          Erstellt den vollständigen Spaltenheader für das ScrollPane.
private  JPanel createRowHeader()
          Erstellt den initialen Zeilenheader für das ScrollPane.
private  JComponent createUpperLeftCorner()
          Erstellt die Komponente für die obere linke Ecke im ScrollPane.
private  JPanel createViewport()
          Erstellt den initialen Viewport für das Scrollpane
 boolean getFirstRun()
          Hoffentlich bald überflüssig.
 HeaderGrid getHeaderGrid()
          Gibt den Spaltenheader zurück.
 void initHeaderSize()
          Die Größe des Headers wird initial gesetzt.
 void removeDataset(int index)
          Löscht einen Datensatz an angegebener Position.
 void setDatasets(List<DataTableObject> dataTableObjects)
          Alle bisherigen Datensätze werden gelöscht und die neuen werden übernommen.
 void setFirstRun(boolean firstRun)
          Kann auf false gesetzt werden, falls die Größen des Spaltenheaders initialisiert worden sind.
private  void setHeaderSizes(HeaderGrid headerGrid, int percent)
          Initialisiert die Größen aller Elemente des Headers rekursiv.
private  void setHeaderSuccessors(HeaderGrid attributeList)
          Bestimmt die Nachfolger einer Attributgruppe bzw.
private  void setLowerPanel(int height)
          Setzt für die unteren Platzhalter des Zeilenheaders und des Viewports die Höhe.
private  void setScrollPane()
          Das ScrollPane wird mit Spaltenheader, Zeilenheader und oberer linker Ecke ausgestattet und initialisiert.
private  void setUpperPanel(int height)
          Setzt für die oberen Platzhalter des Zeilenheaders und des Viewports die Höhe.
 void update(int index, DataTableObject dataTableObject)
          Aktualisiert an angegebener Position den Datensatz.
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

_debug

private final Debug _debug
Der Debug-Logger


_dataViewModel

private final DataViewModel _dataViewModel
speichert eine Instanz des DataViewModel


_attributeGroup

private final AttributeGroup _attributeGroup
speichert die Attributgruppe


_datasets

private final List<Dataset> _datasets
speichert alle Datensätze, die von der Applikation gesendet wurden


_headerScrollPane

private final JScrollPane _headerScrollPane
speichert das dargestellte ScrollPane


_head

private HeaderGrid _head
speichert die Sruktur des Headers


_firstRun

private boolean _firstRun
merkt sich, ob es sich um den ersten Aufruf handelt


_verticalScrollBar

private final JScrollBar _verticalScrollBar
speichert den vertikalen Scrollbalken


_upperRowHeaderPanel

private final JPanel _upperRowHeaderPanel
der obere Platzhalter für den Zeilenheader


_upperViewportPanel

private final JPanel _upperViewportPanel
der obere Platzhalter für den Viewport


_rowHeaderPanel

private final JPanel _rowHeaderPanel
der sichtbare Teil des Zeilenheaders


_viewportPanel

private final JPanel _viewportPanel
der sichtbare Teil des Viewports


_lowerRowHeaderPanel

private final JPanel _lowerRowHeaderPanel
der untere Platzhalter des Zeilenheaders


_lowerViewportPanel

private final JPanel _lowerViewportPanel
der untere Platzhalter des Viewports


_firstRow

private int _firstRow
Gibt den ersten Datensatz an, der angezeigt wird.


_lastRow

private int _lastRow
Gibt den letzten Datensatz an, der angezeigt wird.


_screenHeight

private int _screenHeight
die sichtbare Höhe des Viewports


TIME_FORMAT

private final String TIME_FORMAT
speichert das Zeitformat für die Spalte 'Zeit'

See Also:
Constant Field Values

_rowHeaderWidth

private int _rowHeaderWidth
Gibt die Breite des Zeilenheaders zurück.

Constructor Detail

DataViewPanel

public DataViewPanel(DataViewModel model)
Konstruktor. Benötigt eine Instanz des DataViewModel. Das Model gibt Benachrichtigungen, falls sich an den anzuzeigenden Daten etwas ändert.

Parameters:
model - das DataViewModel
Method Detail

createAndShowGui

private void createAndShowGui()
Erstellt die Elemente für das Panel und ordnet diese an.


setScrollPane

private void setScrollPane()
Das ScrollPane wird mit Spaltenheader, Zeilenheader und oberer linker Ecke ausgestattet und initialisiert. Die vertikale Scrollbar wird ebenfalls initialisiert und ein AdjustmentListener wird angemeldet.


createColumnHeader

private JPanel createColumnHeader()
Erstellt den vollständigen Spaltenheader für das ScrollPane.

Returns:
Spaltenheader

createRowHeader

private JPanel createRowHeader()
Erstellt den initialen Zeilenheader für das ScrollPane.

Returns:
Zeilenheader

createUpperLeftCorner

private JComponent createUpperLeftCorner()
Erstellt die Komponente für die obere linke Ecke im ScrollPane. Sie zeigt die Zeit und das Objekt an.

Returns:
die Komponente

createViewport

private JPanel createViewport()
Erstellt den initialen Viewport für das Scrollpane

Returns:
Viewport des Scrollpanes

getHeaderGrid

public HeaderGrid getHeaderGrid()
Gibt den Spaltenheader zurück.

Returns:
den Spaltenheader

initHeaderSize

public void initHeaderSize()
Die Größe des Headers wird initial gesetzt. Dies ist notwendig, damit die Headergröße durch die Maus verändert werden kann. Diese Methode muss nach dem Anzeigen der Tabelle, allerdings bevor die ersten Daten kommen, aufgerufen werden.

See Also:
setHeaderSizes(HeaderGrid,int)

setHeaderSizes

private void setHeaderSizes(HeaderGrid headerGrid,
                            int percent)
Initialisiert die Größen aller Elemente des Headers rekursiv.

Parameters:
headerGrid - Spaltenheader
percent - gibt die prozentuale Ausdehnung an

setHeaderSuccessors

private void setHeaderSuccessors(HeaderGrid attributeList)
Bestimmt die Nachfolger einer Attributgruppe bzw. einer Attributliste.

Parameters:
attributeList - Objekt vom Typ HeaderGrid, von dem die Nachfolger bestimmt werden sollen.

getFirstRun

public boolean getFirstRun()
Hoffentlich bald überflüssig. Spätestens, wenn die Methode initHeaderSize() von der Applikation aufgerufen wird.

Returns:
gibt true oder false zurück

setFirstRun

public void setFirstRun(boolean firstRun)
Kann auf false gesetzt werden, falls die Größen des Spaltenheaders initialisiert worden sind.

Parameters:
firstRun - true ist Default-Einstellung

addDatasets

public void addDatasets(List<DataTableObject> dataTableObjects)
Fügt eine beliebige Anzahl neuer Datensätze an die bestehenden Datensätze hinten an.

Specified by:
addDatasets in interface DataViewListener
Parameters:
dataTableObjects - Liste neuer Datensätze

addDataset

public void addDataset(int index,
                       DataTableObject dataTableObject)
Fügt einen Datensatz an eine bestimmte Position der bisherigen Datensätze ein. Befindet sich die Position innerhalb der gerade dargestellten Datensätze, dann wird die Darstellung neu erzeugt und angezeigt.

Specified by:
addDataset in interface DataViewListener
Parameters:
index - Position des neuen Datensatzes
dataTableObject - der neue Datensatz

setDatasets

public void setDatasets(List<DataTableObject> dataTableObjects)
Alle bisherigen Datensätze werden gelöscht und die neuen werden übernommen. Die ersten Datensätze, die angezeigt werden können, werden dargestellt.

Specified by:
setDatasets in interface DataViewListener
Parameters:
dataTableObjects - Liste neuer Datensätze

removeDataset

public void removeDataset(int index)
Löscht einen Datensatz an angegebener Position.

Specified by:
removeDataset in interface DataViewListener
Parameters:
index - Position des zu löschenden Datensatzes

update

public void update(int index,
                   DataTableObject dataTableObject)
Aktualisiert an angegebener Position den Datensatz.

Specified by:
update in interface DataViewListener
Parameters:
index - Position des zu aktualisierenden Datensatzes
dataTableObject - aktueller Datensatz

setUpperPanel

private void setUpperPanel(int height)
Setzt für die oberen Platzhalter des Zeilenheaders und des Viewports die Höhe.

Parameters:
height - die neue Höhe der Platzhalter

setLowerPanel

private void setLowerPanel(int height)
Setzt für die unteren Platzhalter des Zeilenheaders und des Viewports die Höhe.

Parameters:
height - die neue Höhe der Platzhalter

checkRowHeight

private boolean checkRowHeight()
Prüft, wieviel Platz die Komponente in der Höhe verbraucht und ob sie noch in der ScrollPane angezeigt werden kann.

Returns:
gibt an, ob sie noch in der ScrollPane angezeigt werden kann