⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scrollpanel.java

📁 打印管理程序,测试完全通过.windows开发环境.
💻 JAVA
字号:
/* 
    $Author: $
    $Date: $
    $Revision: $
    $NoKeywords: $
*/
package jp.co.ntl.awt;

import java.awt.*;
import java.awt.event.*;

import jp.co.ntl.awt.event.ViewListener;
import jp.co.ntl.awt.event.TableModelListener;
import jp.co.ntl.awt.event.TableModelEvent;

public class ScrollPanel extends Container implements AdjustmentListener, ViewListener, TableModelListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
    private static final int SCROLL_WIDTH = 15;

    private Component view = null;
    
    private Component columnHeaderView = null;

    private Viewport viewport;
    private Scrollbar scroll;
    
    public ScrollPanel(Component view) {
        this.view = view;
        viewport = new Viewport(view);
        viewport.add(view);
        
        add(viewport);
        viewport.addViewListener(this);
    
        // Microsoft VM懳嶔
        // 僨僼僅儖僩僐儞僗僩儔僋僞偼惓忢偵摦嶌偟側偄
        //scroll = new Scrollbar();
        //add(scroll);
        //scroll.addAdjustmentListener(this);
    }
    
    // Microsoft VM懳嶔
    // Component(TableModel)偺戝偒偝偑曄傢偭偨偲偒偵
    // componentResize僀儀儞僩偑憲傜傟偰偙側偄
    public void tableChanged(TableModelEvent tme) {
        setScroll();
    }
    
    public void setColumnHeaderView(Component columnHeaderView) {
        this.columnHeaderView = columnHeaderView;
        add(columnHeaderView);
    }
    
    public Viewport getViewport() {
        return viewport;
    }
    
    public void adjustmentValueChanged(AdjustmentEvent ae) {
        Object source = ae.getSource();
        if (source == scroll) {
            viewport.setViewTop(ae.getValue());
        }
    }
    
    public void viewMoved(ComponentEvent ce) {
        if (scroll.getValue() != viewport.getViewTop()) {
            scroll.setValue(viewport.getViewTop());
        }
    }
    
    public void viewResized(ComponentEvent ce) {
        setScroll();
    }
    
    public void setEnabled(boolean enabled) {
        super.setEnabled(enabled);
        
        if (enabled) {
            setScroll();
        } else {
            if (scroll != null) {
                scroll.setEnabled(false);
            }
        }
    }
    
    private void setScroll() {
        if (scroll == null) {
            return;
        }
        Scrollable s = (Scrollable)view;
        scroll.setBlockIncrement(s.getScrollableBlockIncrement(viewport.getViewTop()));
        scroll.setUnitIncrement(s.getScrollableUnitIncrement(viewport.getViewTop()));
        scroll.setMinimum(0);
        if (s.getScrollableHeight() <= viewport.getSize().height) {
            if (scroll.isEnabled()) {
                scroll.setEnabled(false);
            }
        } else {
            if (!scroll.isEnabled()) {
                scroll.setEnabled(true);
            }
            scroll.setVisibleAmount(viewport.getSize().height);
            scroll.setMaximum(s.getScrollableHeight());
        }
    }        
    
    public void setBounds(int x, int y, int width, int height) { 
        super.setBounds(x, y, width, height);

        if (columnHeaderView != null) {
            int headerHeight = columnHeaderView.getSize().height;
            columnHeaderView.setBounds(0, 0, width - SCROLL_WIDTH, headerHeight);
            viewport.setBounds(0, headerHeight, width - SCROLL_WIDTH, height - headerHeight);
            // Microsoft VM懳嶔
            // 僨僼僅儖僩僐儞僗僩儔僋僞偼惓忢偵摦嶌偟側偄
            scroll = new Scrollbar(Scrollbar.VERTICAL, 0, height - headerHeight, 0, height - headerHeight);
            add(scroll);
            scroll.addAdjustmentListener(this);
            //
            scroll.setBounds(width - SCROLL_WIDTH, headerHeight, SCROLL_WIDTH, height - headerHeight);
        } else {
            viewport.setBounds(0, 0, width - SCROLL_WIDTH, height);
            // Microsoft VM懳嶔
            // 僨僼僅儖僩僐儞僗僩儔僋僞偼惓忢偵摦嶌偟側偄
            scroll = new Scrollbar(Scrollbar.VERTICAL, 0, height, 0, height);
            add(scroll);
            scroll.addAdjustmentListener(this);
            //
            scroll.setBounds(width - SCROLL_WIDTH, 0, SCROLL_WIDTH, height);
        }

        setScroll();
    }
    
    public void setBounds(Rectangle r) {
        setBounds(r.x, r.y, r.width, r.height);
    }
    
    public void setSize(int width, int height) {
        super.setSize(width, height);

        if (columnHeaderView != null) {
            int headerHeight = columnHeaderView.getSize().height;
            columnHeaderView.setSize(width - SCROLL_WIDTH, headerHeight);
            viewport.setSize(width - SCROLL_WIDTH, height - headerHeight);
            // Microsoft VM懳嶔
            // 僨僼僅儖僩僐儞僗僩儔僋僞偼惓忢偵摦嶌偟側偄
            scroll = new Scrollbar(Scrollbar.VERTICAL, 0, height - headerHeight, 0, height - headerHeight);
            add(scroll);
            scroll.addAdjustmentListener(this);
            //
            scroll.setSize(SCROLL_WIDTH, height - headerHeight);       
        } else {
            viewport.setSize(width - SCROLL_WIDTH, height);
            // Microsoft VM懳嶔
            // 僨僼僅儖僩僐儞僗僩儔僋僞偼惓忢偵摦嶌偟側偄
            scroll = new Scrollbar(Scrollbar.VERTICAL, 0, height, 0, height);
            add(scroll);
            scroll.addAdjustmentListener(this);
            //
            scroll.setSize(SCROLL_WIDTH, height);                   
        }
        
        setScroll();
    }
        
    public void setSize(Dimension d) {
        setSize(d.width, d.height);
    }
    
    public void update(Graphics g) {
        paint(g);
    }

    public void paint(Graphics g) {
        Color color = null;
        if (columnHeaderView instanceof TableHeader) { 
            color = ((TableHeader)columnHeaderView).getHeaderRenderer().getBackground(false, true);
        }
        if (color == null) {
            g.setColor(columnHeaderView.getBackground());
        } else {
            g.setColor(color);
        }
        g.fill3DRect(getSize().width - SCROLL_WIDTH, 0, SCROLL_WIDTH, columnHeaderView.getSize().height, true);
        
        super.paint(g);
    }        
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -