📄 drawframe.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import javax.swing.*;
import java.util.*;
import java.io.*;
//布置画图界面的类
public class DrawFrame extends JFrame
{
//声明画布变量
private DrawCanvas canvas;
private DrawModel model;
//用于保存文件
private File file;
private static int FrameNo=0;
private int FrameId;
public static final int LIN=1;
public static final int REC=2;
public static final int CIR=3;
public static final int SF=4;
public static final int MOVE=5;
private ArrayList listeners = new ArrayList(10);
public DrawFrame(DrawModel model)
{
this.model=model;
FrameId=++FrameNo;
buildDisplay();
}
private void buildDisplay()
{
setLocation(100,100);
setSize(500,300);
setTitle("画图");
//设置菜单栏
JMenu fileMenu =new JMenu("文件");
JMenu editMenu =new JMenu("编辑");
JMenu seeMenu =new JMenu("查看");
JMenu picMenu =new JMenu("图像");
JMenu colMenu =new JMenu("颜色");
JMenu helpMenu =new JMenu("帮助");
//完成file 菜单功能
JMenuItem newItem=fileMenu.add(new TestAction("新建"));
JMenuItem openItem=fileMenu.add(new TestAction("打开"));
fileMenu.addSeparator();
JMenuItem saveItem=fileMenu.add(new TestAction("保存"));
JMenuItem saveAsItem=fileMenu.add(new TestAction("另存为"));
fileMenu.addSeparator();
fileMenu.add(new AbstractAction("退出"){
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
JMenuBar menuBar=new JMenuBar();
setJMenuBar(menuBar);
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(seeMenu);
menuBar.add(picMenu);
menuBar.add(colMenu);
menuBar.add(helpMenu);
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_MASK));
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_MASK));
//设置工具栏
Action recAction =new ShapeAction("□画矩形");
Action cirAction =new ShapeAction("○画圆形");
Action linAction =new ShapeAction("\画直线");
Action sfAction =new ShapeAction("缩放图形");
Action moveAction=new ShapeAction("移动图形");
JToolBar bar =new JToolBar();
bar.add(recAction);
bar.add(cirAction);
bar.add(linAction);
bar.add(sfAction);
bar.add(moveAction);
bar.setOrientation(1);
//布局画图工具窗口
add(bar,BorderLayout.WEST);
canvas=new DrawCanvas( model);
DrawController con = new DrawController(model, canvas);
add(canvas,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
canvas.refresh();
}
//处理工具栏 发生事件的类
private class ShapeAction extends AbstractAction{
public ShapeAction(String n)
{
super(n);
}
//分别设定发生的事件改变canvas类中的selected
public void actionPerformed (ActionEvent e)
{
if(getValue(Action.NAME).equals("□画矩形"))
model.setSel(REC) ;
else if(getValue(Action.NAME).equals("○画圆形"))
model.setSel(CIR) ;
else if(getValue(Action.NAME).equals("\画直线"))
model.setSel(LIN) ;
else if(getValue(Action.NAME).equals("缩放图形"))
model.setSel(SF) ;
else if(getValue(Action.NAME).equals("移动图形"))
model.setSel(MOVE) ;
}
}
//处理菜单栏发生事件的类
private class TestAction extends AbstractAction{
public TestAction(String n)
{
super(n);
}
public void actionPerformed (ActionEvent e){
if(getValue(Action.NAME).equals("新建"))
{
model.deletShapes();
file = null;
}
else if(getValue(Action.NAME).equals("打开"))
{
JFileChooser chooser = new JFileChooser();
int result = chooser.showOpenDialog(DrawFrame.this);
if (result == JFileChooser.APPROVE_OPTION) {
file = chooser.getSelectedFile();
DataInputStream dIn = null;
try {
dIn = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
if (result == JFileChooser.APPROVE_OPTION) {
model.deletShapes();
try {
Integer i = 0;
SubShape s = null;
while(dIn.readBoolean()){
//i = dIn.readInt();
/*switch (i) {
case LIN:
s = new Line2D.Double(dIn.readDouble(),dIn.readDouble(),dIn.readDouble(),dIn.readDouble());
break;
case REC:
s = new Rectangle2D.Double(dIn.readDouble(),dIn.readDouble(),dIn.readDouble(),dIn.readDouble());
break;
case CIR:
s = new Ellipse2D.Double(dIn.readDouble(),dIn.readDouble(),dIn.readDouble(),dIn.readDouble());
break;
default:
break;
}*/
s=new SubShape(dIn.readInt(),dIn.readInt(),dIn.readInt(),dIn.readInt(),dIn.readInt());
model.addShapes(s);
}
dIn.close();
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Error when Opening!");
}
}
}
}
else if(getValue(Action.NAME).equals("保存")) {
if (file == null) {
JFileChooser chooser = new JFileChooser();
int result = chooser.showSaveDialog(DrawFrame.this );
file = chooser.getSelectedFile();
}
if (file != null) {
DataOutputStream dOut = null;
try {
dOut = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
try {
for (int i = 0; i <model.getShapes().size(); i++) {
SubShape s = model.getShapes().get(i);
dOut.writeBoolean(true);
/*if (s instanceof Line2D.Double) {
dOut.writeInt(model.LIN);
dOut.writeDouble(((Line2D.Double)s).getX1());
dOut.writeDouble(((Line2D.Double)s).getY1());
dOut.writeDouble(((Line2D.Double)s).getX2());
dOut.writeDouble(((Line2D.Double)s).getY2());
} else if (s instanceof Rectangle2D.Double) {
dOut.writeInt(model.REC);
dOut.writeDouble(((Rectangle2D.Double)s).getX());
dOut.writeDouble(((Rectangle2D.Double)s).getY());
dOut.writeDouble(((Rectangle2D.Double)s).getWidth());
dOut.writeDouble(((Rectangle2D.Double)s).getHeight());
} else if (s instanceof Ellipse2D.Double) {
dOut.writeInt(model.CIR);
dOut.writeDouble(((Ellipse2D.Double)s).getX());
dOut.writeDouble(((Ellipse2D.Double)s).getY());
dOut.writeDouble(((Ellipse2D.Double)s).getWidth());
dOut.writeDouble(((Ellipse2D.Double)s).getHeight());
}*/
dOut.writeInt(s.getsel());
dOut.writeInt(s.getX1());
dOut.writeInt(s.getY1());
dOut.writeInt(s.getX2());
dOut.writeInt(s.getY2());
}
dOut.writeBoolean(false);
dOut.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}else if (getValue(Action.NAME).equals("另存为")) {
JFileChooser chooser = new JFileChooser();
int result = chooser.showSaveDialog(DrawFrame.this );
file = chooser.getSelectedFile();
DataOutputStream dOut = null;
try {
dOut = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
if (result == JFileChooser.APPROVE_OPTION) {
try {
for (int i = 0; i < model.getShapes().size(); i++) {
SubShape s = model.getShapes().get(i);
dOut.writeBoolean(true);
/*if (s instanceof Line2D.Double) {
dOut.writeInt(model.LIN);
dOut.writeDouble(((Line2D.Double)s).getX1());
dOut.writeDouble(((Line2D.Double)s).getY1());
dOut.writeDouble(((Line2D.Double)s).getX2());
dOut.writeDouble(((Line2D.Double)s).getY2());
} else if (s instanceof Rectangle2D.Double) {
dOut.writeInt(model.REC);
dOut.writeDouble(((Rectangle2D.Double)s).getX());
dOut.writeDouble(((Rectangle2D.Double)s).getY());
dOut.writeDouble(((Rectangle2D.Double)s).getWidth());
dOut.writeDouble(((Rectangle2D.Double)s).getHeight());
} else if (s instanceof Ellipse2D.Double) {
dOut.writeInt(model.CIR);
dOut.writeDouble(((Ellipse2D.Double)s).getX());
dOut.writeDouble(((Ellipse2D.Double)s).getY());
dOut.writeDouble(((Ellipse2D.Double)s).getWidth());
dOut.writeDouble(((Ellipse2D.Double)s).getHeight());
} */
dOut.writeInt(s.getsel());
dOut.writeInt(s.getX1());
dOut.writeInt(s.getY1());
dOut.writeInt(s.getX2());
dOut.writeInt(s.getY2());
}
dOut.writeBoolean(false);
dOut.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -