?? paintboxframe.java
字號:
/*
* PaintBoxFrame.java
*
* Created on 2007年4月23日, 下午11:56
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package paintbox;
/**
*
* @author fly
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
public class PaintBoxFrame extends JFrame{
/** Creates a new instance of PaintBoxFrame */
private DrawingPanel drawingPanel;
private JMenuItem saveMenuItem, saveAsMenuItem;
private ArrayList currentDrawnItems;
private Shape copyShape;
private JMenuItem cutMenuItem,copyMenuItem,pasteMenuItem,quashMenuItem;
private JMenu editMenu;
//-----------------------------------------------------------------
// 構造函數,構造主窗口
//-----------------------------------------------------------------
public PaintBoxFrame ()
{
super ("PaintBox ");
copyShape=null;
ButtonBar buttons = new ButtonBar ();
drawingPanel = new DrawingPanel (buttons);
currentDrawnItems=drawingPanel.getDrawnItems();
JMenuBar menuBar = createMenuBar ();
setJMenuBar (menuBar);
JPanel appPanel = new JPanel ();
appPanel.setLayout (new BorderLayout ());
appPanel.add (drawingPanel, BorderLayout.CENTER);
appPanel.add (buttons, BorderLayout.NORTH);
getContentPane ().add (appPanel);
addWindowListener (new WindowCloser ());
}
//-----------------------------------------------------------------
// 創建菜單欄(包括“Edit"和"File")
//-----------------------------------------------------------------
public JMenuBar createMenuBar ()
{
MenuListener menuListener = new MenuListener ();
JMenu fileMenu = new JMenu ("File");
fileMenu.addMouseListener (new Listener());
JMenuItem newMenuItem = new JMenuItem ("New");
newMenuItem.addActionListener (menuListener);
newMenuItem.setEnabled (true);
JMenuItem openMenuItem = new JMenuItem ("Open");
openMenuItem.addActionListener (menuListener);
openMenuItem.setEnabled (true);
saveMenuItem = new JMenuItem ("Save");
saveMenuItem.addActionListener (menuListener);
saveMenuItem.setEnabled (true);
saveAsMenuItem = new JMenuItem ("Save As");
saveAsMenuItem.addActionListener (menuListener);
saveAsMenuItem.setEnabled (true);
JMenuItem aboutMenuItem = new JMenuItem ("About...");
aboutMenuItem.addActionListener (menuListener);
aboutMenuItem.setEnabled (true);
JMenuItem exitMenuItem = new JMenuItem ("Exit");
exitMenuItem.addActionListener (menuListener);
fileMenu.add (newMenuItem);
fileMenu.add (openMenuItem);
fileMenu.add (saveMenuItem);
fileMenu.add (saveAsMenuItem);
fileMenu.add (aboutMenuItem);
fileMenu.addSeparator ();
fileMenu.addSeparator ();
fileMenu.add (exitMenuItem);
JMenu editMenu = new JMenu ("Edit");
editMenu.addMouseListener(new Listener());
cutMenuItem = new JMenuItem ("Cut");
cutMenuItem.addActionListener (menuListener);
cutMenuItem.setEnabled (false);
copyMenuItem = new JMenuItem ("Copy");
copyMenuItem.addActionListener (menuListener);
copyMenuItem.setEnabled (false);
pasteMenuItem = new JMenuItem ("Paste");
pasteMenuItem.addActionListener (menuListener);
pasteMenuItem.setEnabled (false);
quashMenuItem=new JMenuItem("Quash Color");
quashMenuItem.addActionListener(menuListener);
quashMenuItem.setEnabled(false);
editMenu.add (cutMenuItem);
editMenu.add (copyMenuItem);
editMenu.add (pasteMenuItem);
editMenu.add(quashMenuItem);
JMenuBar bar = new JMenuBar ();
bar.add (fileMenu);
bar.add (editMenu);
return bar;
}
//*****************************************************************
// 處理關閉窗口的類(開始)
//*****************************************************************
public class WindowCloser extends WindowAdapter
{
//--------------------------------------------------------------
// Terminates the program when the window is closed.
//--------------------------------------------------------------
public void windowClosing (WindowEvent event)
{
int save;
if(!drawingPanel.isSaved())
{
save=JOptionPane.showConfirmDialog(null,"你所畫內容尚未保存,是否要保存?");
if(save==JOptionPane.YES_OPTION)
{
MenuListener listener=new MenuListener();
listener.saveItem();
}
}
System.exit (0);
}
}
//*****************************************************************
// 處理關閉窗口的類(結束)
//*****************************************************************
//*****************************************************************
// 處理菜單的類(開始)
//*****************************************************************
public class MenuListener implements ActionListener
{
//--------------------------------------------------------------
// Handles action events caused by menu selections.
//--------------------------------------------------------------
public void actionPerformed (ActionEvent event)
{
String command;
command=event.getActionCommand ();
if (command.equals ("Exit"))//"Exit"菜單項
{
int save;
if(!drawingPanel.isSaved())
{
save=JOptionPane.showConfirmDialog(null,"你所畫內容尚未保存,是否要保存?");
if(save==JOptionPane.YES_OPTION)
saveItem();
}
System.exit (0);
}
else if(command.equals("About..."))
{
JOptionPane.showMessageDialog
(null,"歡迎使用PaintBox\n");
}
else if(command.equals("New"))//"New"菜單項
{
int save;
if(!drawingPanel.isSaved())
{
save=JOptionPane.showConfirmDialog(null,"你所畫內容尚未保存,是否要保存?");
if(save==JOptionPane.YES_OPTION)
saveItem();
}
currentDrawnItems.clear();
drawingPanel.setDrawnItems(currentDrawnItems);
drawingPanel.setOpenFromFile(false);
}
else if(command.equals("Save As"))//"Save As"菜單項
{
drawingPanel.quashSlectedItem();
JFileChooser jfc=new JFileChooser();
if(jfc.showSaveDialog(drawingPanel)==JFileChooser.APPROVE_OPTION)
save(jfc.getSelectedFile());
drawingPanel.setOpenFromFile(true);
drawingPanel.setOpenFile(jfc.getSelectedFile());
drawingPanel.setSaved();
}
else if(command.equals("Open")) //"Open"菜單項
{
int save;
if(!drawingPanel.isSaved())
{
save=JOptionPane.showConfirmDialog(null,"你沒有保存,是否要保存?");
if(save==JOptionPane.YES_OPTION)
saveItem();
}
JFileChooser jfc=new JFileChooser();
if(jfc.showOpenDialog(drawingPanel)==JFileChooser.APPROVE_OPTION)
open(jfc.getSelectedFile());
drawingPanel.setOpenFromFile(true);
drawingPanel.setOpenFile(jfc.getSelectedFile());
}
else if(command.equals("Save"))
{
drawingPanel.quashSlectedItem();//先取消選擇
saveItem();//此處本應該和"Save AS"菜單項一樣實現,但為了在"New"、"Open"中引用相同處理過程,故單獨處理
drawingPanel.setSaved();
}
else if(command.equals("Copy"))
{
if(drawingPanel.getSlectedItem()!=-1)
{
copyShape=(Shape)((Shape)(currentDrawnItems.get(drawingPanel.getSlectedItem()))).clone();
pasteMenuItem.setEnabled(true);
drawingPanel.quashSlectedItem();
}
}
else if(command.equals("Cut"))
{
if(drawingPanel.getSlectedItem()!=-1)
{
copyShape=(Shape)(currentDrawnItems.get(drawingPanel.getSlectedItem()));
currentDrawnItems.remove(drawingPanel.getSlectedItem());
drawingPanel.setDrawnItems(currentDrawnItems);
pasteMenuItem.setEnabled(true);
}
}
else if(command.equals("Paste"))
{
Shape shape=(Shape)copyShape.clone();
copyShape=shape;
shape.positionChanged(10,10);
currentDrawnItems.add(shape);
drawingPanel.setDrawnItems(currentDrawnItems);
}
else if(command.equals("Quash Color"))
{
if(drawingPanel.getSlectedItem()!=-1)
{
((BoundedShape)(currentDrawnItems.get(drawingPanel.getSlectedItem()))).setUnFilled();
drawingPanel.quashSlectedItem();
drawingPanel.setDrawnItems(currentDrawnItems);
}
}
}
public void saveItem() //保存函數(同時被“SAVE”菜單項和刷新視區時調用)
{
if(drawingPanel.isOpenFromFile())
{
save(drawingPanel.getOpenFile());
}
else
{
JFileChooser jfc=new JFileChooser();
if(jfc.showSaveDialog(drawingPanel)==JFileChooser.APPROVE_OPTION)
save(jfc.getSelectedFile());
drawingPanel.setOpenFromFile(true);
drawingPanel.setOpenFile(jfc.getSelectedFile());
drawingPanel.setSaved();
}
}
private void save(File file) //內部函數,執行保存過程
{
ObjectOutputStream out;
try{
out=new ObjectOutputStream(new FileOutputStream(file));
Integer inte=new Integer(currentDrawnItems.size());
out.writeObject(inte);
for(int i=0; i<currentDrawnItems.size(); i++)
out.writeObject(currentDrawnItems.get(i));
out.close();
}
catch(IOException ex)
{
System.out.println(ex);
}
}
private void open(File file) //內部函數,執行打開過程
{
ObjectInputStream in;
try{
in=new ObjectInputStream(new FileInputStream(file));
Integer inte=(Integer)in.readObject();
int objectNum=inte.intValue();
currentDrawnItems.clear();
for(int i=0; i<objectNum; i++)
currentDrawnItems.add((Shape)in.readObject());
in.close();
}
catch(IOException ex)
{
System.out.println(ex);
}
catch(ClassNotFoundException ex2)
{
System.out.println(ex2);
}
drawingPanel.setDrawnItems(currentDrawnItems);
}
}
//*****************************************************************
// 處理菜單的類(結束)
//*****************************************************************
//*****************************************************************
// 控制菜單中菜單項可不可用的類(開始)
//*****************************************************************
private class Listener extends MouseAdapter
{
public void mouseEntered(MouseEvent event)
{
if(drawingPanel.getSlectedItem()!=-1)
{
cutMenuItem.setEnabled(true);
copyMenuItem.setEnabled(true);
if(currentDrawnItems.get(drawingPanel.getSlectedItem()) instanceof BoundedShape)
{
quashMenuItem.setEnabled(true);
}
else
quashMenuItem.setEnabled(false);
}
else
{
cutMenuItem.setEnabled(false);
copyMenuItem.setEnabled(false);
quashMenuItem.setEnabled(false);
}
if(drawingPanel.isSaved())
saveMenuItem.setEnabled(false);
else
saveMenuItem.setEnabled(true);
}
}
//*****************************************************************
// 控制"Edit"菜單中類可不可用的類(結束)
//*****************************************************************
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -