/*
* @(#)SplitScrollPane.java
*
* Copyright 2002 EGANTT LLP. All rights reserved.
* PROPRIETARY/QPL. Use is subject to license terms.
*/
package com.egantt.swing.pane.basic;
import com.egantt.swing.SwingPane;
import com.egantt.swing.scroll.ScrollManager;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Graphics;
import javax.swing.BoundedRangeModel;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JViewport;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* Extends JSplitPane to provide a component which has a JScrollPane visible
* in each section. The right section has the scrollbar overriden so that it
* can be utilised by a custom scrollbar.
*/
public class SplitScrollPane extends BasicSplitPane implements SwingPane
{
private static final long serialVersionUID = 5011039430920996486L;
protected final JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL);
protected JScrollPane rightComponent;
protected BoundedRangeModel rangeModel;
protected final ChangeListener changeListener = new LocalChangeListener();
public SplitScrollPane(int type)
{
super();
JScrollPane leftPane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_NEVER,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
leftPane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
super.add(leftPane);
/*
rightComponent= new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
rightComponent.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
JPanel rightPane = new JPanel(new BorderLayout());
rightPane.add(rightComponent, BorderLayout.CENTER);
rightPane.add(scrollBar, BorderLayout.SOUTH);
super.add(rightPane);*/
// synchronize the scroll models only works this way
//rightComponent.setVerticalScrollBar(leftPane.getVerticalScrollBar());
}
// __________________________________________________________________________
public void setComponent(Component component)
{
if (this.getComponent(0) == null) // not initialised yet see BasicSplitUI
{
super.add(component);
return;
}
((JScrollPane)this.getComponent(0)).setViewportView(component);
}
/*
public void setLeftComponent(Component component)
{
if (leftComponent == null) // not initialised yet see BasicSplitUI
{
super.setLeftComponent(component);
return;
}
((JScrollPane)leftComponent).setViewportView(component);
}*/
/*
public void setRightComponent(Component component)
{
if (rightComponent == null) // not initialised yet see BasicSplitUI
{
super.setRightComponent(component);
return;
}
rightComponent.setViewportView(component);
}*/
// __________________________________________________________________________
/**
* Set the model from the scroll pane
*/
public synchronized void setRangeModel(BoundedRangeModel rangeModel)
{
if (this.rangeModel != null)
{
this.rangeModel.removeChangeListener(changeListener);
}
// for the default scrollbar model lets use some defaults
scrollBar.setBlockIncrement(rangeModel.getExtent() / 100);
scrollBar.setUnitIncrement(rangeModel.getExtent() / 50);
if (rangeModel instanceof ScrollManager) {
ScrollManager scrollManager = (ScrollManager) rangeModel;
scrollBar.setBlockIncrement(scrollManager.getBlockIncrement());
scrollBar.setUnitIncrement(scrollManager.getUnitIncrement());
}
scrollBar.setModel(rangeModel);
rangeModel.addChangeListener(changeListener);
this.rangeModel = rangeModel;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
}
protected class LocalChangeListener implements ChangeListener {
public void stateChanged(ChangeEvent e) {
setRangeModel(rangeModel);
}
}
}