📄 zsheetview.java
字号:
/*
* Copyright 2002 EZCell , Inc. All rights reserved.
* Version 1.0.
* Author W.John
*/
/*
* put your module comment here
* formatted with JxBeauty (c) johann.langhofer@nextra.at
*/
package ezcell;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Point;
import java.awt.dnd.Autoscroll;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragSource;
import java.awt.dnd.DropTarget;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.Vector;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2001</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/
public class ZSheetView extends JPanel {
ZSheetState modal;
ZSheetCanvas canvas;
ZSheetStateControl control;
// ui
_Canvas internalCanvas;
JScrollBar vertBar;
JScrollBar horzBar;
JPanel bottom;
ZSheetView(ZSheetState us) {
modal = us;
modal.addListener(new _ZSheetStateListener());
canvas = new ZSheetCanvas(modal);
control = new ZSheetStateControl(modal);
init();
}
/**
* DOCUMENT ME!
*/
void init() {
vertBar = new JScrollBar(JScrollBar.VERTICAL, 1, 1, 1, modal.getSheet().getLastRow());
horzBar = new JScrollBar(JScrollBar.HORIZONTAL, 1, 1, 1, modal.getSheet().getLastCol());
internalCanvas = new _Canvas(canvas);
internalCanvas.setLayout(null);
horzBar.addAdjustmentListener(control);
vertBar.addAdjustmentListener(control);
internalCanvas.setLayout(null);
// hook the listeners of mouse event
internalCanvas.addMouseMotionListener(control);
internalCanvas.addMouseListener(control);
internalCanvas.addKeyListener(control);
internalCanvas.addComponentListener(control);
internalCanvas.addListener(control);
// register dnd support
DragSource dragSource = DragSource.getDefaultDragSource();
dragSource.createDefaultDragGestureRecognizer(internalCanvas,
DnDConstants.ACTION_COPY_OR_MOVE, control);
new DropTarget(internalCanvas, DnDConstants.ACTION_MOVE, control);
// add a vertical scroll bar in the east
setLayout(new BorderLayout());
add(BorderLayout.EAST, vertBar);
// add a horiztal scroll bar in the south
bottom = new JPanel();
bottom.setLayout(new BorderLayout());
bottom.add(horzBar, BorderLayout.CENTER);
// pad a button in the corner
JLabel corner = new JLabel();
corner.setPreferredSize(new Dimension(16, 10));
bottom.add(corner, BorderLayout.EAST);
add(BorderLayout.SOUTH, bottom);
// add _canvas into center
// _canvas.addComponentListener(this);
canvas.setComponent(internalCanvas);
add(BorderLayout.CENTER, internalCanvas);
this.addFocusListener(control);
control.loadShortKeys(internalCanvas);
}
/**
* DOCUMENT ME!
*
* @return
*/
public ZSheetState getSheetState() {
return modal;
}
/**
* DOCUMENT ME!
*
* @param visible
*/
public void setScrollbarVisible(boolean visible) {
if (visible) {
if (!contain(vertBar)) {
add(BorderLayout.EAST, vertBar);
}
if (!contain(bottom)) {
add(BorderLayout.SOUTH, bottom);
}
} else {
remove(vertBar);
remove(bottom);
}
this.revalidate();
}
/**
* DOCUMENT ME!
*
* @param comp
*
* @return
*/
private boolean contain(Component comp) {
for (int i = 0; i < this.getComponentCount(); i++)
if (this.getComponent(i) == comp) {
return true;
}
return false;
}
class _ZSheetStateListener extends ZSheetStateAdapter {
/**
* DOCUMENT ME!
*
* @param modal
*/
public void uiStateChanged(ZSheetState modal) {
boolean changeUI = false;
if (modal.getVisibleCells().left != horzBar.getValue()) {
horzBar.setValue(modal.getVisibleCells().left);
changeUI = true;
}
if (modal.getVisibleCells().top != horzBar.getValue()) {
vertBar.setValue(modal.getVisibleCells().top);
changeUI = true;
}
// if (changeUI) {
// updateUI();
// }
}
}
}
class _Canvas extends JPanel implements Autoscroll {
public Insets scrollInsets = new Insets(20, 20, 20, 20);
/**
* put your documentation comment here
* @param comp
*/
private ZSheetCanvas delegate;
private Vector listeners = new Vector();
_Canvas(ZSheetCanvas canvas) {
super();
delegate = canvas;
this.addComponentListener(new ComponentAdapter() {
public void componentShown(ComponentEvent e) {
((JComponent) e.getSource()).requestFocus();
}
});
}
/**
* DOCUMENT ME!
*
* @return
*/
public Insets getAutoscrollInsets() {
// scrollInsets.right = horzBar.getMaximum();
// scrollInsets.bottom = vertBar.getMaximum();
return scrollInsets;
}
/**
* DOCUMENT ME!
*
* @return
*/
public boolean isFocusTraversable() {
return true;
}
/**
* DOCUMENT ME!
*
* @param location
*/
public synchronized void autoscroll(Point location) {
for (int i = 0; i < listeners.size(); i++) {
ZScrollListener lst = (ZScrollListener) listeners.get(i);
lst.scrolled(this, location, scrollInsets);
}
}
/**
* DOCUMENT ME!
*
* @param lst
*/
public void addListener(ZScrollListener lst) {
listeners.add(lst);
}
/**
* DOCUMENT ME!
*
* @param lst
*/
public void removeListener(ZScrollListener lst) {
listeners.remove(lst);
}
/**
* DOCUMENT ME!
*
* @param comp
*/
public void paintComponent(Graphics comp) {
super.paintComponent(comp);
if (delegate == null) {
return;
}
delegate.paint((Graphics2D) comp);
}
}
interface ZScrollListener {
/**
* DOCUMENT ME!
*
* @param object
* @param p
* @param inset
*/
public void scrolled(Component object, Point p, Insets inset);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -