📄 grid.java
字号:
package org.nebula.cwt.grid;
import java.awt.*;
/**
* Grid
*
* Description:
*
* @author xuan
*
*/
public abstract class Grid extends Canvas implements GridModelListener {
protected GridModel model;
protected int leftBorder, topBorder;
protected int cubicWidth, cubicHeight;
protected GridListener listener = null;
Image memImage;
Graphics memGraphics;
public Grid(GridModel m, int lb, int tb, int cw, int ch) {
model = m;
model.setGridModelListener(this);
leftBorder = lb;
topBorder = tb;
cubicWidth = cw;
cubicHeight = ch;
memImage = null;
}
public void setModel(GridModel m) {
if (model != null) {
model.setGridModelListener(null);
}
model = m;
model.setGridModelListener(this);
}
public GridModel getModel() {
return model;
}
public int getLeftBorder() {
return leftBorder;
}
public int getTopBorder() {
return topBorder;
}
public int getCubicHeight() {
return cubicHeight;
}
public int getCubicWidth() {
return cubicWidth;
}
/**
* Set a listener to the Grid that's notified each time a change to the data
* model occurs.
*
* @param l
* the GridDataListener
*/
public void setGridListener(GridListener l) {
listener = l;
}
public void gridDataChanged() {
repaint();
}
public void paint(Graphics g) {
if (memImage == null) {
memImage = createImage(this.getWidth(), this.getHeight());
}
memGraphics = memImage.getGraphics();
drawBackground(memGraphics);
int cols = model.getColumns();
int rows = model.getRows();
for (int i = 0; i < cols; i++)
for (int j = 0; j < rows; j++) {
memGraphics.translate(leftBorder + i * cubicWidth, topBorder + j * cubicHeight);
drawCubic(memGraphics, i, j);
memGraphics.translate(-(leftBorder + i * cubicWidth), -(topBorder + j * cubicHeight));
}
g.drawImage(memImage, 0, 0, this);
}
public void update(Graphics g)
{
paint(g);
}
public abstract void drawBackground(Graphics g);
public abstract void drawCubic(Graphics g, int col, int row);
public void pointerReleased(int x, int y) {
if (listener == null) {
return;
}
int cols = model.getColumns();
int rows = model.getRows();
int i = (int) (x - leftBorder) / cubicWidth;
int j = (int) (y - topBorder) / cubicHeight;
if ((i < 0) || (i >= cols) || (j < 0) || (j >= rows)) {
return;
}
listener.cubicClicked(i, j);
}
public boolean keyDown(Event e, int key) {
switch (key) {
case Event.DOWN:
listener.downKeyReleased();
break;
case Event.UP:
listener.upKeyReleased();
break;
case Event.LEFT:
listener.leftKeyReleased();
break;
case Event.RIGHT:
listener.rightKeyReleased();
break;
case Event.ENTER:
listener.selectKeyReleased();
break;
default:
numberKeyRelease(key);
break;
}
return true;
}
protected void numberKeyRelease(int keyCode) {
// do nothing;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -