📄 sketchframe.java
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.border.*;
import java.awt.print.*;
import java.applet.Applet;
import com.sun.j3d.utils.applet.MainFrame;
public class SketchFrame extends JFrame implements Constants,ActionListener,Observer{
public SketchFrame(String title,Sketcher app){
this.app=app;
windowTitle=title+":";
setTitle(windowTitle+fileName);
if(!DEFAULT_DIR.exists()){
if(!DEFAULT_DIR.mkdir())
JOptionPane.showMessageDialog(this,"不能产生工作目录","不能产生工作目录",JOptionPane.ERROR_MESSAGE);
}
setJMenuBar(menuBar);
JMenu fileMenu=new JMenu("文件");
JMenu zoomMenu=new JMenu("视图");
JMenu elementMenu=new JMenu("图象");
JMenu optionMenu=new JMenu("选项");
JMenu j3dMenu=new JMenu("3D演示1");
JMenu j3dMenu2=new JMenu("3D演示2");
JMenu j3dMenu3=new JMenu("3D演示3");
JMenu j3dMenu4=new JMenu("3D演示4");
JMenu j3dMenu5=new JMenu("返回画图");
JMenu chatMenu=new JMenu("网络助手");
JMenu helpMenu=new JMenu("帮助");
fileMenu.setMnemonic('F');
elementMenu.setMnemonic('E');
helpMenu.setMnemonic('H');
optionMenu.setMnemonic('O');
newAction=new FileAction("新建",KeyStroke.getKeyStroke('N',Event.CTRL_MASK));
openAction=new FileAction("打开",KeyStroke.getKeyStroke('O',Event.CTRL_MASK));
closeAction=new FileAction("关闭");
saveAction=new FileAction("保存",KeyStroke.getKeyStroke('S',Event.CTRL_MASK));
saveAsAction=new FileAction("另存为",KeyStroke.getKeyStroke('A',Event.CTRL_MASK));
printSetupAction=new FileAction("页面设置" );
printAction=new FileAction("打印",KeyStroke.getKeyStroke('P',Event.CTRL_MASK));
zoomOutAction=new ZoomOutAction("放大");
zoomInAction=new ZoomInAction("缩小");
addMenuItem(fileMenu,newAction);
addMenuItem(fileMenu,openAction);
addMenuItem(fileMenu,saveAction);
addMenuItem(fileMenu,saveAsAction);
addMenuItem(zoomMenu,zoomOutAction);
addMenuItem(zoomMenu,zoomInAction);
addToolBarButton(newAction);
addToolBarButton(openAction);
addToolBarButton(saveAction);
addToolBarButton(saveAsAction);
addToolBarButton(printAction);
toolBar.addSeparator();
addToolBarButton(zoomOutAction);
addToolBarButton(zoomInAction);
toolBar.addSeparator();
saveAction.setEnabled(false);
saveAsAction.setEnabled(false);
printAction.setEnabled(false);
closeAction.setEnabled(false);
fileMenu.addSeparator();
addMenuItem(fileMenu,printSetupAction );
addMenuItem(fileMenu,printAction);
fileMenu.addSeparator();
addMenuItem(fileMenu,closeAction);
addMenuItem(elementMenu,lineAction=new TypeAction("直线",LINE));
addMenuItem(elementMenu,rectangleAction=new TypeAction("矩形",RECTANGLE));
addMenuItem(elementMenu,circleAction=new TypeAction("圆",CIRCLE));
addMenuItem(elementMenu,ellipseAction=new TypeAction("椭圆",ELLIPSE));
addMenuItem(elementMenu,curveAction=new TypeAction("曲线",CURVE));
addMenuItem(elementMenu,textAction=new TypeAction("标注",TEXT));
addToolBarButton(lineAction);
addToolBarButton(rectangleAction);
addToolBarButton(circleAction);
addToolBarButton(ellipseAction);
addToolBarButton(curveAction);
addToolBarButton(textAction);
elementMenu.addSeparator();
JMenu colorMenu=new JMenu("颜色");
addMenuItem(colorMenu,redAction=new ColorAction("红",Color.red));
addMenuItem(colorMenu,yellowAction=new ColorAction("黄",Color.yellow));
addMenuItem(colorMenu,greenAction=new ColorAction("绿",Color.green));
addMenuItem(colorMenu,blueAction=new ColorAction("蓝",Color.blue));
popup.add(lineAction).setIcon(null);
popup.add(rectangleAction).setIcon(null);
popup.add(circleAction).setIcon(null);
popup.add(ellipseAction).setIcon(null);
popup.add(curveAction).setIcon(null);
popup.add(textAction).setIcon(null);
popup.addSeparator();
popup.add(redAction).setIcon(null);;
popup.add(yellowAction).setIcon(null);
popup.add(greenAction).setIcon(null);
popup.add(blueAction).setIcon(null);
customColorItem=popup.add("更多颜色");
customColorItem.addActionListener(this);
j3dSphereMotionIem=j3dMenu.add("运动的球");
j3dText3DItem=j3dMenu2.add("3D文本1");
j3dPickTextItem=j3dMenu3.add("3D文本2");
j3dConicWorldItem=j3dMenu4.add("混乱的世界");
j3dBackToj2dItem=j3dMenu5.add("返回画图");
j3dSphereMotionIem.addActionListener(this);
j3dText3DItem.addActionListener(this);
j3dPickTextItem.addActionListener(this);
j3dConicWorldItem.addActionListener(this);
j3dBackToj2dItem.addActionListener(this);
chatItem=new JCheckBoxMenuItem("显示网络助手",true);
chatItem.addActionListener(this);
chatMenu.add(chatItem);
elementMenu.add(colorMenu);
aboutItem=new JMenuItem("关于");
aboutItem.addActionListener(this);
helpMenu.add(aboutItem);
fontItem=new JMenuItem("字体");
fontItem.addActionListener(this);
optionMenu.add(fontItem);
optionMenu.add(customColorItem );
menuBar.add(fileMenu);
menuBar.add(zoomMenu);
menuBar.add(elementMenu);
menuBar.add(optionMenu);
menuBar.add(j3dMenu);
menuBar.add(j3dMenu2);
menuBar.add(j3dMenu3);
menuBar.add(j3dMenu4);
menuBar.add(j3dMenu5);
menuBar.add(chatMenu);
menuBar.add(helpMenu);
getContentPane().add(statusBar,BorderLayout.SOUTH);
getContentPane().add(toolBar,BorderLayout.NORTH);
}
private JMenuItem addMenuItem(JMenu menu,Action action){
JMenuItem item=menu.add(action);
KeyStroke keystroke=(KeyStroke)action.getValue(action.ACCELERATOR_KEY);
if(keystroke!=null){
item.setAccelerator(keystroke);
}
item.setIcon(null);
return item;
}
private JButton addToolBarButton(Action action){
JButton button=toolBar.add(action);
button.setBorder(new BevelBorder(BevelBorder.RAISED));
button.setText(null);
return button;
}
class FileAction extends AbstractAction{
public FileAction(String name){
super(name);
String iconName="image/"+name+".jpg";
if(new File(iconName).exists())
putValue(SMALL_ICON,new ImageIcon(iconName));
}
public FileAction(String name,KeyStroke keyStroke){
this(name);
if(keyStroke!=null){
putValue(ACCELERATOR_KEY,keyStroke);
}
}
public void actionPerformed(ActionEvent e){
String name=(String)getValue(NAME);
if(name.equals(saveAction.getValue(NAME))){
save();
}
else if(name.equals(saveAsAction.getValue(NAME))){
saveAs() ;
}
else if(name.equals(openAction.getValue(NAME))){
open();
}
else if(name.equals(newAction.getValue(NAME))){
newFile();
}
else if(name.equals(closeAction.getValue(NAME))){
}
else if(name.equals(printAction.getValue(NAME))){
onPrint();
}
else if(name.equals(printSetupAction.getValue(NAME))){
onPrintSetup();
}
}
}
class TypeAction extends AbstractAction{
private int type;
public TypeAction(String name,int type){
super(name);
this.type=type;
String iconName="image/"+name+".jpg";
if(new File(iconName).exists())
putValue(SMALL_ICON,new ImageIcon(iconName));
}
public void actionPerformed(ActionEvent e){
elementType=type;
statusBar.setTypePane(type);
}
}
class ZoomOutAction extends AbstractAction{
public ZoomOutAction(String name){
super(name);
String iconName="image/"+name+".jpg";
if(new File(iconName).exists())
putValue(SMALL_ICON,new ImageIcon(iconName));
}
public void actionPerformed(ActionEvent e){
scale=scale*(1+0.2);
app.getView().setScale(scale);
}
}
class ZoomInAction extends AbstractAction{
public ZoomInAction(String name){
super(name);
String iconName="image/"+name+".jpg";
if(new File(iconName).exists())
putValue(SMALL_ICON,new ImageIcon(iconName));
}
public void actionPerformed(ActionEvent e){
scale=scale*(1-0.2);
app.getView().setScale(scale);
}
}
class ColorAction extends AbstractAction{
private Color color;
public ColorAction(String name,Color color){
super(name);
this.color=color;
}
public void actionPerformed(ActionEvent e){
elementColor=color;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -