从画图程序开始,走进GUI编程世界
leMenu.addSeparator();
addMenuItem(fileMenu,saveAction=new FileAction("保存","保存文件"),KeyStroke
.getKeyStroke('S',Event.CTRL_MASK));
addMenuItem(fileMenu,saveAsAction=new FileAction("另存为...","文件另存为"));
fileMenu.addSeparator();
addMenuItem(fileMenu,printAction=new FileAction("打印","打印文件"),KeyStroke
.getKeyStroke('P',Event.CTRL_MASK));
addMenuItem(elementMenu,lineAction=new TypeAction("直线",LINE,"绘制直线"),KeyStroke
.getKeyStroke('1',Event.CTRL_MASK));
addMenuItem(elementMenu,rectangleAction=new TypeAction("矩形",RECTANGLE,"绘制矩形"),KeyStroke
.getKeyStroke('2',Event.CTRL_MASK));
addMenuItem(elementMenu,circleAction=new TypeAction("椭圆",CIRCLE,"绘制椭圆"),KeyStroke
.getKeyStroke('3',Event.CTRL_MASK));
addMenuItem(elementMenu,curveAction=new TypeAction("曲线",CURVE,"绘制曲线"),KeyStroke
.getKeyStroke('4',Event.CTRL_MASK));
addMenuItem(elementMenu,textAction=new TypeAction("文字",TEXT,"输入文字"),KeyStroke
.getKeyStroke('5',Event.CTRL_MASK));
elementMenu.addSeparator();
JMenu colorMenu=new JMenu("颜色");
elementMenu.add(colorMenu);
addMenuItem(colorMenu,redAction=new ColorAction("红色",Color.red,"绘制红色"),KeyStroke
.getKeyStroke('1',Event.ALT_MASK));
addMenuItem(colorMenu,yellowAction=new ColorAction("黄色",Color.yellow,"绘制黄色"),KeyStroke
.getKeyStroke('2',Event.ALT_MASK));
addMenuItem(colorMenu,greenAction=new ColorAction("绿色",Color.green,"绘制绿色"),KeyStroke
.getKeyStroke('3',Event.ALT_MASK));
addMenuItem(colorMenu,blueAction=new ColorAction("蓝色",Color.blue,"绘制蓝色"),KeyStroke
.getKeyStroke('4',Event.ALT_MASK));
aboutItem=new JMenuItem("关于");
aboutItem.setAccelerator(KeyStroke.getKeyStroke('A',Event.CTRL_MASK));
aboutItem.addActionListener(this);
helpMenu.add(aboutItem);
fontItem=new JMenuItem("字体选择");
fontItem.setAccelerator(KeyStroke.getKeyStroke('T',Event.CTRL_MASK));
fontItem.addActionListener(this);
optionsMenu.add(fontItem);
customColorItem=new JMenuItem("颜色选择");
customColorItem.setAccelerator(KeyStroke.getKeyStroke('R',Event.CTRL_MASK));
customColorItem.addActionListener(this);
optionsMenu.add(customColorItem);
menubar.add(fileMenu);
menubar.add(elementMenu);
menubar.add(optionsMenu);
menubar.add(helpMenu);
//工具栏的设置
toolBar.add(newAction);
toolBar.add(openAction);
toolBar.add(saveAction);
toolBar.add(printAction);
toolBar.addSeparator();
toolBar.add(lineAction);
toolBar.add(rectangleAction);
toolBar.add(circleAction);
toolBar.add(curveAction);
toolBar.add(textAction);
toolBar.addSeparator();
toolBar.add(redAction);
toolBar.add(yellowAction);
toolBar.add(greenAction);
toolBar.add(blueAction);
getContentPane().add(toolBar,BorderLayout.NORTH);
toolBar.setFloatable(false);//工具栏禁止漂浮
getContentPane().add(statusBar,BorderLayout.SOUTH);
fontDlg=new FontDialog(this);
popup=new JPopupMenu("General");
popup.add(lineAction);
popup.add(rectangleAction);
popup.add(circleAction);
popup.add(curveAction);
popup.add(textAction);
popup.addSeparator();
popup.add(redAction);
popup.add(yellowAction);
popup.add(greenAction);
popup.add(blueAction);
files=new JFileChooser(DEFAULT_DIR);
frameTitle=title+":";
setTitle(frameTitle+filename);
if(!DEFAULT_DIR.exists())
if(!DEFAULT_DIR.mkdirs())
JOptionPane.showMessageDialog(this,"建立文件失败!","错误",JOptionPane.ERROR_MESSAGE);
}
private JMenuItem addMenuItem(JMenu menu,Action action){
//重载添加菜单元素的函数使其不具有图象,不具有快键
JMenuItem item=menu.add(action);
item.setIcon(null);
return item;
}
private JMenuItem addMenuItem(JMenu menu,Action action,KeyStroke keys){
//重载添加菜单元素的函数使其不具有图象,具有快键
JMenuItem item=menu.add(action);
item.setIcon(null);
item.setAccelerator(keys);
return item;
}
private JButton addToolBarButton(Action action){
//重载添加工具栏按钮
JButton button=toolBar.add(action);
button.setText(null);
return button;
}
public Color getElementColor(){
return elementColor;
}
public int getElementType(){
return elementType;
}
public Font getFont(){
return font;
}
public void setFont(Font font){
this.font=font;
}
public JPopupMenu getPopup(){
return popup;
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==aboutItem){
JOptionPane.showMessageDialog((Component)e.getSource(),"版本说明:画图软件由博雅制作"
,"关于",JOptionPane.INFORMATION_MESSAGE);
}
else if(e.getSource()==fontItem){
Rectangle bounds=getBounds();
fontDlg.setLocation(bounds.x+bounds.width/3,bounds.y+bounds.height/3);
fontDlg.setVisible(true);
}
else if(e.getSource()==customColorItem){
Color color=JColorChooser.showDialog(this,"颜色选择",elementColor);
if(color!=null){
elementColor=color;
statusBar.setColorPane(color);
}
}
}
public void update(Observable o,Object obj){
changed=true;
}
private File showDialog(String dlgTitle,String ABT,String ABTP,
char ABM,File file){
files.setDialogTitle(dlgTitle);
files.setApproveButtonText(ABT);
files.setApproveButtonToolTipText(ABTP);
files.setApproveButtonMnemonic(ABM);
files.rescanCurrentDirectory();
files.setSelectedFile(file);
int result=files.showDialog(DrawFrame.this,null);
return(result==files.APPROVE_OPTION)?files.getSelectedFile():null;
}
private void saveIt(){
if(!changed) return;
if(modelFile!=null)
saveDraw(modelFile)
addMenuItem(fileMenu,saveAction=new FileAction("保存","保存文件"),KeyStroke
.getKeyStroke('S',Event.CTRL_MASK));
addMenuItem(fileMenu,saveAsAction=new FileAction("另存为...","文件另存为"));
fileMenu.addSeparator();
addMenuItem(fileMenu,printAction=new FileAction("打印","打印文件"),KeyStroke
.getKeyStroke('P',Event.CTRL_MASK));
addMenuItem(elementMenu,lineAction=new TypeAction("直线",LINE,"绘制直线"),KeyStroke
.getKeyStroke('1',Event.CTRL_MASK));
addMenuItem(elementMenu,rectangleAction=new TypeAction("矩形",RECTANGLE,"绘制矩形"),KeyStroke
.getKeyStroke('2',Event.CTRL_MASK));
addMenuItem(elementMenu,circleAction=new TypeAction("椭圆",CIRCLE,"绘制椭圆"),KeyStroke
.getKeyStroke('3',Event.CTRL_MASK));
addMenuItem(elementMenu,curveAction=new TypeAction("曲线",CURVE,"绘制曲线"),KeyStroke
.getKeyStroke('4',Event.CTRL_MASK));
addMenuItem(elementMenu,textAction=new TypeAction("文字",TEXT,"输入文字"),KeyStroke
.getKeyStroke('5',Event.CTRL_MASK));
elementMenu.addSeparator();
JMenu colorMenu=new JMenu("颜色");
elementMenu.add(colorMenu);
addMenuItem(colorMenu,redAction=new ColorAction("红色",Color.red,"绘制红色"),KeyStroke
.getKeyStroke('1',Event.ALT_MASK));
addMenuItem(colorMenu,yellowAction=new ColorAction("黄色",Color.yellow,"绘制黄色"),KeyStroke
.getKeyStroke('2',Event.ALT_MASK));
addMenuItem(colorMenu,greenAction=new ColorAction("绿色",Color.green,"绘制绿色"),KeyStroke
.getKeyStroke('3',Event.ALT_MASK));
addMenuItem(colorMenu,blueAction=new ColorAction("蓝色",Color.blue,"绘制蓝色"),KeyStroke
.getKeyStroke('4',Event.ALT_MASK));
aboutItem=new JMenuItem("关于");
aboutItem.setAccelerator(KeyStroke.getKeyStroke('A',Event.CTRL_MASK));
aboutItem.addActionListener(this);
helpMenu.add(aboutItem);
fontItem=new JMenuItem("字体选择");
fontItem.setAccelerator(KeyStroke.getKeyStroke('T',Event.CTRL_MASK));
fontItem.addActionListener(this);
optionsMenu.add(fontItem);
customColorItem=new JMenuItem("颜色选择");
customColorItem.setAccelerator(KeyStroke.getKeyStroke('R',Event.CTRL_MASK));
customColorItem.addActionListener(this);
optionsMenu.add(customColorItem);
menubar.add(fileMenu);
menubar.add(elementMenu);
menubar.add(optionsMenu);
menubar.add(helpMenu);
//工具栏的设置
toolBar.add(newAction);
toolBar.add(openAction);
toolBar.add(saveAction);
toolBar.add(printAction);
toolBar.addSeparator();
toolBar.add(lineAction);
toolBar.add(rectangleAction);
toolBar.add(circleAction);
toolBar.add(curveAction);
toolBar.add(textAction);
toolBar.addSeparator();
toolBar.add(redAction);
toolBar.add(yellowAction);
toolBar.add(greenAction);
toolBar.add(blueAction);
getContentPane().add(toolBar,BorderLayout.NORTH);
toolBar.setFloatable(false);//工具栏禁止漂浮
getContentPane().add(statusBar,BorderLayout.SOUTH);
fontDlg=new FontDialog(this);
popup=new JPopupMenu("General");
popup.add(lineAction);
popup.add(rectangleAction);
popup.add(circleAction);
popup.add(curveAction);
popup.add(textAction);
popup.addSeparator();
popup.add(redAction);
popup.add(yellowAction);
popup.add(greenAction);
popup.add(blueAction);
files=new JFileChooser(DEFAULT_DIR);
frameTitle=title+":";
setTitle(frameTitle+filename);
if(!DEFAULT_DIR.exists())
if(!DEFAULT_DIR.mkdirs())
JOptionPane.showMessageDialog(this,"建立文件失败!","错误",JOptionPane.ERROR_MESSAGE);
}
private JMenuItem addMenuItem(JMenu menu,Action action){
//重载添加菜单元素的函数使其不具有图象,不具有快键
JMenuItem item=menu.add(action);
item.setIcon(null);
return item;
}
private JMenuItem addMenuItem(JMenu menu,Action action,KeyStroke keys){
//重载添加菜单元素的函数使其不具有图象,具有快键
JMenuItem item=menu.add(action);
item.setIcon(null);
item.setAccelerator(keys);
return item;
}
private JButton addToolBarButton(Action action){
//重载添加工具栏按钮
JButton button=toolBar.add(action);
button.setText(null);
return button;
}
public Color getElementColor(){
return elementColor;
}
public int getElementType(){
return elementType;
}
public Font getFont(){
return font;
}
public void setFont(Font font){
this.font=font;
}
public JPopupMenu getPopup(){
return popup;
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==aboutItem){
JOptionPane.showMessageDialog((Component)e.getSource(),"版本说明:画图软件由博雅制作"
,"关于",JOptionPane.INFORMATION_MESSAGE);
}
else if(e.getSource()==fontItem){
Rectangle bounds=getBounds();
fontDlg.setLocation(bounds.x+bounds.width/3,bounds.y+bounds.height/3);
fontDlg.setVisible(true);
}
else if(e.getSource()==customColorItem){
Color color=JColorChooser.showDialog(this,"颜色选择",elementColor);
if(color!=null){
elementColor=color;
statusBar.setColorPane(color);
}
}
}
public void update(Observable o,Object obj){
changed=true;
}
private File showDialog(String dlgTitle,String ABT,String ABTP,
char ABM,File file){
files.setDialogTitle(dlgTitle);
files.setApproveButtonText(ABT);
files.setApproveButtonToolTipText(ABTP);
files.setApproveButtonMnemonic(ABM);
files.rescanCurrentDirectory();
files.setSelectedFile(file);
int result=files.showDialog(DrawFrame.this,null);
return(result==files.APPROVE_OPTION)?files.getSelectedFile():null;
}
private void saveIt(){
if(!changed) return;
if(modelFile!=null)
saveDraw(modelFile)
Tags:画图,程序,开始,走进,GUI,编程,世界

