📄 paintcanvas.java
字号:
}
/**
* 向网络上的其他客户更新当前图形
*/
public void updateNetFiguare(String mesHeader) {
if (currentShape != null)
updateNetFiguare(mesHeader, currentShape);
}
/**
* 向网络上的其他客户更新指定图形
*/
public void updateNetFiguare(String mesHeader, AbstractFiguare fig) {
if (view.IsConnected()) {
if (fig != null) {
view.sendMessage(new NetMessage(mesHeader, fig.clone()));
fig.hasUpdatedNet();
} else {
if (Application.DEBUG > 6)
System.out.println("客户端请求发送一个空的图形");
}
}
}
/**
* 向网络上的其他客户更新指定图形,除非它没有被修改过
*/
public void updateAvailableNetFiguare(String mesHeader, AbstractFiguare fig) {
if (view.IsConnected() && fig != null) {
if (fig.isChanged()) {
view.sendMessage(new NetMessage(mesHeader, fig.clone()));
fig.hasUpdatedNet();
}
}
}
@Override
public void mouseMoved(MouseEvent e) {
if (drawingShape == AbstractFiguare.ARROW) {
AbstractFiguare newMoveOnFiguare;
if ((newMoveOnFiguare = getSelectedShape(e.getX(), e.getY())) != null) {
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
boolean needRepaint = (moveOnFiguare != newMoveOnFiguare);
// if(moveOnFiguare==null || moveOnFiguare!=newMoveOnFiguare){
moveOnFiguare = newMoveOnFiguare;
if (needRepaint)
repaint();
// }
} else {
moveOnFiguare = null;
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
repaint();
}
int style;
if (currentShape == null)
return;
if ((style = currentShape.getDirectionRect(e.getX(), e.getY())) != -1) {
setCursor(currentShape.getCursor(style));
}
}
}
public Vector<AbstractFiguare> getFiguares() {
return drawingOps;
}
private Color strokeColor, fillColor;
private int drawingShape;
private AbstractFiguare currentShape, moveOnFiguare;
private Vector<AbstractFiguare> drawingOps = new Vector<AbstractFiguare>();
/**
* 从网络上接受到一个消息包
*/
public void receiveFiguare(NetMessage netMes) {
AbstractFiguare fig = (AbstractFiguare) netMes.messageContent;
try {
if (netMes.messageHeader.equals(NetMessage.MES_NEW_FIGUARE)) {// 新建了一个图形
if (!drawingOps.contains(fig))
drawingOps.add(fig);
else {
System.out.println("原来就有1个了");
}
putClientProperty(View.CANVAS_CHANGED_PROPERTY, "服务器添加图形:"
+ fig.serialId);
} else if (netMes.messageHeader.equals(NetMessage.MES_DEL_FIGUARE)) {
drawingOps.remove(fig);
putClientProperty(View.CANVAS_CHANGED_PROPERTY, "服务器删除图形:"
+ fig.serialId);
} else if (netMes.messageHeader
.equals(NetMessage.MES_CLEAR_FIGUARE)) {
drawingOps.clear();
putClientProperty(View.CANVAS_CHANGED_PROPERTY, "服务器清除所有图形:"
+ fig.serialId);
} else if (netMes.messageHeader
.equals(NetMessage.MES_CHANGE_FIGUARE)) {
int index = drawingOps.indexOf(fig);
if (index != -1) {
putClientProperty(View.CANVAS_CHANGED_PROPERTY, "服务器更新图形:"
+ fig.serialId);
drawingOps.setElementAt(fig, index);
} else {
if (Application.DEBUG > 6)
System.out.println("服务器尝试更新一个不存在的图形" + fig.serialId);
}
} else if (netMes.messageHeader
.startsWith(NetMessage.MES_UPDOWN_FIGUARE_PREFIX)) {
String str = netMes.messageHeader;
if (str.equals(NetMessage.MES_HIGHEST_FIGUARE)) {
toHighestLayer(fig, false);
}
if (str.equals(NetMessage.MES_HIGHER_FIGUARE)) {
toHigherLayer(fig, false);
} else if (str.equals(NetMessage.MES_LOWER_FIGUARE)) {
toLowerLayer(fig, false);
} else if (str.equals(NetMessage.MES_LOWEST_FIGUARE)) {
toLowestLayer(fig, false);
} else {
if (Application.DEBUG > 6)
System.out.println("服务器的移动层次操作错误" + fig.serialId);
}
}
if (fig.equals(currentShape)) {
currentShape.setSelect(false);
}
if (fig.equals(moveOnFiguare)) {
moveOnFiguare = null;
}
repaint();
} catch (NullPointerException e) {
if (Application.DEBUG > 3)
System.out.println("服务器发送了一个null的图形");
}
repaint();
}
/**
* 获取所有图形
*/
public Vector<AbstractFiguare> getAllFiguares() {
return drawingOps;
}
/**
* 选择在这个位置上的图形
*/
public void selectShapeInLocation(double x, double y) {
AbstractFiguare d = getSelectedShape(x, y);
if (currentShape != null) {
currentShape.setSelect(false);
}
if (d != null) {
currentShape = d;
currentShape.setSelect(true);
currentShape.willMoveFromHere(x, y);
} else {
currentShape = null;
}
repaint();
}
/**
* 设置当前图形为fig
*/
public void setCurrentShape(AbstractFiguare fig) {
if (drawingOps.contains(fig)) {
if (currentShape != null) {
currentShape.setSelect(false);
}
currentShape = fig;
currentShape.setSelect(true);
repaint();
}
}
/**
* 将指定图形移至顶层
*/
public void toHighestLayer(AbstractFiguare fig, boolean needUpdateNet) {
int index = drawingOps.indexOf(fig);
if (index != -1 && index < drawingOps.size() - 1) {
drawingOps.remove(index);
drawingOps.add(fig);
if (needUpdateNet)
updateNetFiguare(NetMessage.MES_HIGHEST_FIGUARE, fig);
putClientProperty(View.CANVAS_CHANGED_PROPERTY, fig.serialId
+ ":移至顶层");
repaint();
}
}
/**
* 将指定图形上移一层
*/
public void toHigherLayer(AbstractFiguare fig, boolean needUpdateNet) {
int index = drawingOps.indexOf(fig);
if (index != -1 && index < drawingOps.size() - 1) {
drawingOps.setElementAt(drawingOps.elementAt(index + 1), index);
drawingOps.setElementAt(fig, index + 1);
if (needUpdateNet)
updateNetFiguare(NetMessage.MES_HIGHER_FIGUARE, fig);
putClientProperty(View.CANVAS_CHANGED_PROPERTY, fig.serialId
+ ":上移一层");
repaint();
}
}
/**
* 将指定图形下移一层
*/
public void toLowerLayer(AbstractFiguare fig, boolean needUpdateNet) {
int index = drawingOps.indexOf(fig);
if (index > 0) {
drawingOps.setElementAt(drawingOps.elementAt(index - 1), index);
drawingOps.setElementAt(fig, index - 1);
if (needUpdateNet)
updateNetFiguare(NetMessage.MES_LOWER_FIGUARE, fig);
putClientProperty(View.CANVAS_CHANGED_PROPERTY, fig.serialId
+ ":下移一层");
repaint();
}
}
/**
* 将指定图形移至底层
*/
public void toLowestLayer(AbstractFiguare fig, boolean needUpdateNet) {
int index = drawingOps.indexOf(fig);
if (index > 0) {
drawingOps.remove(index);
drawingOps.add(0, fig);
if (needUpdateNet)
updateNetFiguare(NetMessage.MES_LOWEST_FIGUARE, fig);
putClientProperty(View.CANVAS_CHANGED_PROPERTY, fig.serialId
+ ":移至低层");
repaint();
}
}
/**
* 获取指定fig的层次
*/
public int getFiguareLayer(AbstractFiguare fig) {
return drawingOps.indexOf(fig);
}
/**
* 移动当前图形
*/
public void translateCurrentFiguare(int dx, int dy) {
System.out.println(currentShape);
if (currentShape == null)
return;
currentShape.translate(dx, dy);
updateNetFiguare(NetMessage.MES_CHANGE_FIGUARE);
repaint();
putClientProperty(View.CANVAS_CHANGED_PROPERTY, currentShape.serialId
+ ":键盘控制移动 ");
}
/**
* 选择当前图形
* @param theta
*/
public void rotateCurrentFiguare(double theta) {
if (currentShape == null)
return;
currentShape.rotate(theta);
updateNetFiguare(NetMessage.MES_CHANGE_FIGUARE);
repaint();
putClientProperty(View.CANVAS_CHANGED_PROPERTY, currentShape.serialId
+ ":键盘控制旋转 ");
}
/**
* 删除当前图形
*/
public void delCurrentFiguare() {
delFiguare(currentShape);
currentShape = null;
}
/**
* 删除指定的图形
* @param fig 指定的图形
*/
public void delFiguare(AbstractFiguare fig) {
if (fig == null)
return;
if (fig.isSelect()) {
fig.setSelect(false);
}
if (moveOnFiguare!=null && moveOnFiguare.equals(fig)) {
moveOnFiguare = null;
}
updateNetFiguare(NetMessage.MES_DEL_FIGUARE, fig);
repaint();
putClientProperty(View.CANVAS_CHANGED_PROPERTY, fig.serialId + ":被删除 ");
drawingOps.remove(fig);
fig = null;
}
/**
* 剪切当前的图形
* @return 剪切的图形
*/
public AbstractFiguare cutFiguare() {
if(currentShape==null)return null;
AbstractFiguare figuare=(AbstractFiguare)currentShape.clone();
delCurrentFiguare();
return figuare;
}
/**
* 复制当前的图形
* @return 复制的图形
*/
public AbstractFiguare copyFiguare() {
if(currentShape==null)return null;
return (AbstractFiguare)currentShape.clone();
}
/**
* 粘贴指定的图形
*/
public void pasteFiguare(AbstractFiguare fig) {
if(fig!=null){
drawingOps.add(fig);
fig.serialId=getNetName()+(++AbstractFiguare.figuareNum);
updateNetFiguare(NetMessage.MES_NEW_FIGUARE , fig);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -