File "SketcherFrame.java"
Full Path: /home/analogde/www/Ebook/Informatique/JAVA/Source_TLS/Sketcher/src/SketcherFrame.java
File size: 20.4 KB
MIME-type: text/x-java
Charset: utf-8
// Frame for the Sketcher application
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.awt.*;
import static java.awt.event.InputEvent.*;
import static java.awt.AWTEvent.*;
import static java.awt.Color.*;
import static javax.swing.Action.*;
@SuppressWarnings("serial")
public class SketcherFrame extends JFrame {
// Constructor
public SketcherFrame(String title, Sketcher theApp) {
setTitle(title); // Set the window title
this.theApp = theApp; // Save app. object reference
setJMenuBar(menuBar); // Add the menu bar to the window
setDefaultCloseOperation(EXIT_ON_CLOSE); // Default is exit the application
createFileMenu(); // Create the File menu
createElementMenu(); // Create the element menu
createColorMenu(); // Create the element menu
createToolbar();
toolBar.setRollover(true);
getContentPane().add(toolBar, BorderLayout.NORTH);
}
// Create File menu item actions
private void createFileMenuActions() {
newAction = new FileAction("New", 'N', CTRL_DOWN_MASK);
openAction = new FileAction("Open", 'O', CTRL_DOWN_MASK);
closeAction = new FileAction("Close");
saveAction = new FileAction("Save", 'S', CTRL_DOWN_MASK);
saveAsAction = new FileAction("Save As...");
printAction = new FileAction("Print", 'P', CTRL_DOWN_MASK);
exitAction = new FileAction("Exit", 'X', CTRL_DOWN_MASK);
// Initialize the array
FileAction[] actions = {openAction, closeAction, saveAction, saveAsAction, printAction, exitAction};
fileActions = actions;
String imagePath = "D:/Sketcher/Images/";
Icon NEW24 = new ImageIcon(imagePath + "New24.gif");
Icon OPEN24 = new ImageIcon(imagePath + "Open24.gif");
Icon SAVE24 = new ImageIcon(imagePath + "Save24.gif");
Icon SAVEAS24 = new ImageIcon(imagePath + "SaveAs24.gif");
Icon PRINT24 = new ImageIcon(imagePath + "Print24.gif");
Icon LINE24 = new ImageIcon(imagePath + "Line24.gif");
Icon RECTANGLE24 = new ImageIcon(imagePath + "Rectangle24.gif");
Icon CIRCLE24 = new ImageIcon(imagePath + "Circle24.gif");
Icon CURVE24 = new ImageIcon(imagePath + "Curve24.gif");
Icon RED24 = new ImageIcon(imagePath + "Red24.gif");
Icon GREEN24 = new ImageIcon(imagePath + "Green24.gif");
Icon BLUE24 = new ImageIcon(imagePath + "Blue24.gif");
Icon YELLOW24 = new ImageIcon(imagePath + "Yellow24.gif");
Icon NEW16 = new ImageIcon(imagePath + "new16.gif");
Icon OPEN16 = new ImageIcon(imagePath + "Open16.gif");
Icon SAVE16 = new ImageIcon(imagePath + "Save16.gif");
Icon SAVEAS16 = new ImageIcon(imagePath + "SaveAs16.gif");
Icon PRINT16 = new ImageIcon(imagePath + "print16.gif");
Icon LINE16 = new ImageIcon(imagePath + "Line16.gif");
Icon RECTANGLE16 = new ImageIcon(imagePath + "Rectangle16.gif");
Icon CIRCLE16 = new ImageIcon(imagePath + "Circle16.gif");
Icon CURVE16 = new ImageIcon(imagePath + "Curve16.gif");
Icon RED16 = new ImageIcon(imagePath + "Red16.gif");
Icon GREEN16 = new ImageIcon(imagePath + "Green16.gif");
Icon BLUE16 = new ImageIcon(imagePath + "Blue16.gif");
Icon YELLOW16 = new ImageIcon(imagePath + "Yellow16.gif");
int LINE = 101;
int RECTANGLE = 102;
int CIRCLE = 103;
int CURVE = 104;
int DEFAULT_ELEMENT_TYPE = LINE;
Color DEFAULT_ELEMENT_COLOR = Color.BLUE;
// Add toolbar icons
newAction.putValue(LARGE_ICON_KEY, NEW24);
openAction.putValue(LARGE_ICON_KEY, OPEN24);
saveAction.putValue(LARGE_ICON_KEY, SAVE24);
saveAsAction.putValue(LARGE_ICON_KEY, SAVEAS24);
printAction.putValue(LARGE_ICON_KEY, PRINT24);
// Add menu item icons
newAction.putValue(SMALL_ICON, NEW16);
openAction.putValue(SMALL_ICON, OPEN16);
saveAction.putValue(SMALL_ICON, SAVE16);
saveAsAction.putValue(SMALL_ICON,SAVEAS16);
printAction.putValue(SMALL_ICON, PRINT16);
// Add tooltip text
newAction.putValue(SHORT_DESCRIPTION, "Create a new sketch");
openAction.putValue(SHORT_DESCRIPTION, "Read a sketch from a file");
closeAction.putValue(SHORT_DESCRIPTION, "Close the current sketch");
saveAction.putValue(SHORT_DESCRIPTION, "Save the current sketch to file");
saveAsAction.putValue(SHORT_DESCRIPTION, "Save the current sketch to a new file");
printAction.putValue(SHORT_DESCRIPTION, "Print the current sketch");
exitAction.putValue(SHORT_DESCRIPTION, "Exit Sketcher");
}
// Create the File menu
private void createFileMenu() {
JMenu fileMenu = new JMenu("File"); // Create File menu
fileMenu.setMnemonic('F'); // Create shortcut
createFileMenuActions(); // Create Actions for File menu item
// Construct the file drop-down menu
fileMenu.add(newAction); // New Sketch menu item
fileMenu.add(openAction); // Open sketch menu item
fileMenu.add(closeAction); // Close sketch menu item
fileMenu.addSeparator(); // Add separator
fileMenu.add(saveAction); // Save sketch to file
fileMenu.add(saveAsAction); // Save As menu item
fileMenu.addSeparator(); // Add separator
fileMenu.add(printAction); // Print sketch menu item
fileMenu.addSeparator(); // Add separator
fileMenu.add(exitAction); // Print sketch menu item
menuBar.add(fileMenu); // Add the file menu
}
// Create Element menu actions
private void createElementTypeActions() {
String imagePath = "D:/Sketcher/Images/";
Icon NEW24 = new ImageIcon(imagePath + "New24.gif");
Icon OPEN24 = new ImageIcon(imagePath + "Open24.gif");
Icon SAVE24 = new ImageIcon(imagePath + "Save24.gif");
Icon SAVEAS24 = new ImageIcon(imagePath + "SaveAs24.gif");
Icon PRINT24 = new ImageIcon(imagePath + "Print24.gif");
Icon LINE24 = new ImageIcon(imagePath + "Line24.gif");
Icon RECTANGLE24 = new ImageIcon(imagePath + "Rectangle24.gif");
Icon CIRCLE24 = new ImageIcon(imagePath + "Circle24.gif");
Icon CURVE24 = new ImageIcon(imagePath + "Curve24.gif");
Icon RED24 = new ImageIcon(imagePath + "Red24.gif");
Icon GREEN24 = new ImageIcon(imagePath + "Green24.gif");
Icon BLUE24 = new ImageIcon(imagePath + "Blue24.gif");
Icon YELLOW24 = new ImageIcon(imagePath + "Yellow24.gif");
Icon NEW16 = new ImageIcon(imagePath + "new16.gif");
Icon OPEN16 = new ImageIcon(imagePath + "Open16.gif");
Icon SAVE16 = new ImageIcon(imagePath + "Save16.gif");
Icon SAVEAS16 = new ImageIcon(imagePath + "SaveAs16.gif");
Icon PRINT16 = new ImageIcon(imagePath + "print16.gif");
Icon LINE16 = new ImageIcon(imagePath + "Line16.gif");
Icon RECTANGLE16 = new ImageIcon(imagePath + "Rectangle16.gif");
Icon CIRCLE16 = new ImageIcon(imagePath + "Circle16.gif");
Icon CURVE16 = new ImageIcon(imagePath + "Curve16.gif");
Icon RED16 = new ImageIcon(imagePath + "Red16.gif");
Icon GREEN16 = new ImageIcon(imagePath + "Green16.gif");
Icon BLUE16 = new ImageIcon(imagePath + "Blue16.gif");
Icon YELLOW16 = new ImageIcon(imagePath + "Yellow16.gif");
int LINE = 101;
int RECTANGLE = 102;
int CIRCLE = 103;
int CURVE = 104;
int DEFAULT_ELEMENT_TYPE = LINE;
Color DEFAULT_ELEMENT_COLOR = Color.BLUE;
lineAction = new TypeAction("Line", LINE, 'L', CTRL_DOWN_MASK);
rectangleAction = new TypeAction("Rectangle", RECTANGLE, 'R', CTRL_DOWN_MASK);
circleAction = new TypeAction("Circle", CIRCLE,'C', CTRL_DOWN_MASK);
curveAction = new TypeAction("Curve", CURVE,'U', CTRL_DOWN_MASK);
// Initialize the array
TypeAction[] actions = {lineAction, rectangleAction, circleAction, curveAction};
typeActions = actions;
// Add toolbar icons
lineAction.putValue(LARGE_ICON_KEY, LINE24);
rectangleAction.putValue(LARGE_ICON_KEY, RECTANGLE24);
circleAction.putValue(LARGE_ICON_KEY, CIRCLE24);
curveAction.putValue(LARGE_ICON_KEY, CURVE24);
// Add menu item icons
lineAction.putValue(SMALL_ICON, LINE16);
rectangleAction.putValue(SMALL_ICON, RECTANGLE16);
circleAction.putValue(SMALL_ICON, CIRCLE16);
curveAction.putValue(SMALL_ICON, CURVE16);
// Add tooltip text
lineAction.putValue(SHORT_DESCRIPTION, "Draw lines");
rectangleAction.putValue(SHORT_DESCRIPTION, "Draw rectangles");
circleAction.putValue(SHORT_DESCRIPTION, "Draw circles");
curveAction.putValue(SHORT_DESCRIPTION, "Draw curves");
}
// Create the Elements menu
private void createElementMenu() {
createElementTypeActions();
elementMenu = new JMenu("Elements"); // Create Elements menu
elementMenu.setMnemonic('E'); // Create shortcut
createRadioButtonDropDown(elementMenu, typeActions, lineAction);
menuBar.add(elementMenu); // Add the element menu
}
// Create Color menu actions
private void createElementColorActions() {
redAction = new ColorAction("Red", RED, 'R', CTRL_DOWN_MASK|ALT_DOWN_MASK);
yellowAction = new ColorAction("Yellow", YELLOW, 'Y', CTRL_DOWN_MASK|ALT_DOWN_MASK);
greenAction = new ColorAction("Green", GREEN, 'G', CTRL_DOWN_MASK|ALT_DOWN_MASK);
blueAction = new ColorAction("Blue", BLUE, 'B', CTRL_DOWN_MASK|ALT_DOWN_MASK);
// Initialize the array
ColorAction[] actions = {redAction, greenAction, blueAction, yellowAction};
colorActions = actions;
String imagePath = "D:/Sketcher/Images/";
Icon NEW24 = new ImageIcon(imagePath + "New24.gif");
Icon OPEN24 = new ImageIcon(imagePath + "Open24.gif");
Icon SAVE24 = new ImageIcon(imagePath + "Save24.gif");
Icon SAVEAS24 = new ImageIcon(imagePath + "SaveAs24.gif");
Icon PRINT24 = new ImageIcon(imagePath + "Print24.gif");
Icon LINE24 = new ImageIcon(imagePath + "Line24.gif");
Icon RECTANGLE24 = new ImageIcon(imagePath + "Rectangle24.gif");
Icon CIRCLE24 = new ImageIcon(imagePath + "Circle24.gif");
Icon CURVE24 = new ImageIcon(imagePath + "Curve24.gif");
Icon RED24 = new ImageIcon(imagePath + "Red24.gif");
Icon GREEN24 = new ImageIcon(imagePath + "Green24.gif");
Icon BLUE24 = new ImageIcon(imagePath + "Blue24.gif");
Icon YELLOW24 = new ImageIcon(imagePath + "Yellow24.gif");
Icon NEW16 = new ImageIcon(imagePath + "new16.gif");
Icon OPEN16 = new ImageIcon(imagePath + "Open16.gif");
Icon SAVE16 = new ImageIcon(imagePath + "Save16.gif");
Icon SAVEAS16 = new ImageIcon(imagePath + "SaveAs16.gif");
Icon PRINT16 = new ImageIcon(imagePath + "print16.gif");
Icon LINE16 = new ImageIcon(imagePath + "Line16.gif");
Icon RECTANGLE16 = new ImageIcon(imagePath + "Rectangle16.gif");
Icon CIRCLE16 = new ImageIcon(imagePath + "Circle16.gif");
Icon CURVE16 = new ImageIcon(imagePath + "Curve16.gif");
Icon RED16 = new ImageIcon(imagePath + "Red16.gif");
Icon GREEN16 = new ImageIcon(imagePath + "Green16.gif");
Icon BLUE16 = new ImageIcon(imagePath + "Blue16.gif");
Icon YELLOW16 = new ImageIcon(imagePath + "Yellow16.gif");
int LINE = 101;
int RECTANGLE = 102;
int CIRCLE = 103;
int CURVE = 104;
int DEFAULT_ELEMENT_TYPE = LINE;
Color DEFAULT_ELEMENT_COLOR = Color.BLUE;
// Add toolbar icons
redAction.putValue(LARGE_ICON_KEY, RED24);
greenAction.putValue(LARGE_ICON_KEY, GREEN24);
blueAction.putValue(LARGE_ICON_KEY, BLUE24);
yellowAction.putValue(LARGE_ICON_KEY, YELLOW24);
// Add menu item icons
redAction.putValue(SMALL_ICON, RED16);
blueAction.putValue(SMALL_ICON, BLUE16);
greenAction.putValue(SMALL_ICON, GREEN16);
yellowAction.putValue(SMALL_ICON, YELLOW16);
// Add tooltip text
redAction.putValue(SHORT_DESCRIPTION, "Draw in red");
blueAction.putValue(SHORT_DESCRIPTION, "Draw in blue");
greenAction.putValue(SHORT_DESCRIPTION, "Draw in green");
yellowAction.putValue(SHORT_DESCRIPTION, "Draw in yellow");
}
// Create the Color menu
private void createColorMenu() {
createElementColorActions();
colorMenu = new JMenu("Color"); // Create Elements menu
colorMenu.setMnemonic('C'); // Create shortcut
createRadioButtonDropDown(colorMenu, colorActions, blueAction);
menuBar.add(colorMenu); // Add the color menu
}
// Menu creation helper
private void createRadioButtonDropDown(JMenu menu, Action[] actions, Action selected) {
ButtonGroup group = new ButtonGroup();
JRadioButtonMenuItem item = null;
for(Action action : actions) {
group.add(menu.add(item = new JRadioButtonMenuItem(action)));
if(action == selected) {
item.setSelected(true); // This is default selected
}
}
}
// Create toolbar buttons on the toolbar
private void createToolbar() {
for(FileAction action: fileActions){
if(action != exitAction && action != closeAction)
addToolbarButton(action); // Add the toolbar button
}
toolBar.addSeparator();
// Create Color menu buttons
for(ColorAction action:colorActions){
addToolbarButton(action); // Add the toolbar button
}
toolBar.addSeparator();
// Create Elements menu buttons
for(TypeAction action:typeActions){
addToolbarButton(action); // Add the toolbar button
}
}
// Create and add a toolbar button
private void addToolbarButton(Action action) {
JButton button = new JButton(action); // Create from Action
button.setBorder(BorderFactory.createCompoundBorder( // Add button border
new EmptyBorder(2,5,5,2), // Outside border
BorderFactory.createRaisedBevelBorder())); // Inside border
button.setHideActionText(true); // No label on the button
toolBar.add(button); // Add the toolbar button
}
// Set radio button menu checks
private void setChecks(JMenu menu, Object eventSource) {
if(eventSource instanceof JButton){
JButton button = (JButton)eventSource;
Action action = button.getAction();
for(int i = 0 ; i < menu.getItemCount() ; ++i) {
JMenuItem item = menu.getItem(i);
item.setSelected(item.getAction() == action);
}
}
}
// Inner class defining Action objects for File menu items
class FileAction extends AbstractAction {
// Create action with a name
FileAction(String name) {
super(name);
}
// Create action with a name and accelerator
FileAction(String name, char ch, int modifiers) {
super(name);
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(ch, modifiers));
// Now find the character to underline
int index = name.toUpperCase().indexOf(ch);
if(index != -1) {
putValue(DISPLAYED_MNEMONIC_INDEX_KEY, index);
}
}
// Event handler
public void actionPerformed(ActionEvent e) {
// You will add action code here eventually...
}
}
// Inner class defining Action objects for Element type menu items
class TypeAction extends AbstractAction {
// Create action with just a name property
TypeAction(String name, int typeID) {
super(name);
this.typeID = typeID;
}
// Create action with a name and an accelerator
private TypeAction(String name,int typeID, char ch, int modifiers) {
this(name, typeID);
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(ch, modifiers));
// Now find the character to underline
int index = name.toUpperCase().indexOf(ch);
if(index != -1) {
putValue(DISPLAYED_MNEMONIC_INDEX_KEY, index);
}
}
public void actionPerformed(ActionEvent e) {
elementType = typeID;
setChecks(elementMenu, e.getSource());
}
private int typeID;
}
// Handles color menu items
class ColorAction extends AbstractAction {
// Create an action with a name and a color
public ColorAction(String name, Color color) {
super(name);
this.color = color;
}
// Create an action with a name, a color, and an accelerator
public ColorAction(String name, Color color, char ch, int modifiers) {
this(name, color);
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(ch, modifiers));
// Now find the character to underline
int index = name.toUpperCase().indexOf(ch);
if(index != -1) {
putValue(DISPLAYED_MNEMONIC_INDEX_KEY, index);
}
}
public void actionPerformed(ActionEvent e) {
elementColor = color;
setChecks(colorMenu, e.getSource());
}
private Color color;
}
String imagePath = "D:/Sketcher/Images/";
Icon NEW24 = new ImageIcon(imagePath + "New24.gif");
Icon OPEN24 = new ImageIcon(imagePath + "Open24.gif");
Icon SAVE24 = new ImageIcon(imagePath + "Save24.gif");
Icon SAVEAS24 = new ImageIcon(imagePath + "SaveAs24.gif");
Icon PRINT24 = new ImageIcon(imagePath + "Print24.gif");
Icon LINE24 = new ImageIcon(imagePath + "Line24.gif");
Icon RECTANGLE24 = new ImageIcon(imagePath + "Rectangle24.gif");
Icon CIRCLE24 = new ImageIcon(imagePath + "Circle24.gif");
Icon CURVE24 = new ImageIcon(imagePath + "Curve24.gif");
Icon RED24 = new ImageIcon(imagePath + "Red24.gif");
Icon GREEN24 = new ImageIcon(imagePath + "Green24.gif");
Icon BLUE24 = new ImageIcon(imagePath + "Blue24.gif");
Icon YELLOW24 = new ImageIcon(imagePath + "Yellow24.gif");
Icon NEW16 = new ImageIcon(imagePath + "new16.gif");
Icon OPEN16 = new ImageIcon(imagePath + "Open16.gif");
Icon SAVE16 = new ImageIcon(imagePath + "Save16.gif");
Icon SAVEAS16 = new ImageIcon(imagePath + "SaveAs16.gif");
Icon PRINT16 = new ImageIcon(imagePath + "print16.gif");
Icon LINE16 = new ImageIcon(imagePath + "Line16.gif");
Icon RECTANGLE16 = new ImageIcon(imagePath + "Rectangle16.gif");
Icon CIRCLE16 = new ImageIcon(imagePath + "Circle16.gif");
Icon CURVE16 = new ImageIcon(imagePath + "Curve16.gif");
Icon RED16 = new ImageIcon(imagePath + "Red16.gif");
Icon GREEN16 = new ImageIcon(imagePath + "Green16.gif");
Icon BLUE16 = new ImageIcon(imagePath + "Blue16.gif");
Icon YELLOW16 = new ImageIcon(imagePath + "Yellow16.gif");
int LINE = 101;
int RECTANGLE = 102;
int CIRCLE = 103;
int CURVE = 104;
int DEFAULT_ELEMENT_TYPE = LINE;
Color DEFAULT_ELEMENT_COLOR = Color.BLUE;
// File actions
private FileAction newAction, openAction, closeAction, saveAction, saveAsAction, printAction, exitAction;
private FileAction[] fileActions; // File actions as an array
// Element type actions
private TypeAction lineAction, rectangleAction, circleAction, curveAction;
private TypeAction[] typeActions; // Type actions as an array
// Element color actions
private ColorAction redAction, yellowAction,greenAction, blueAction;
private ColorAction[] colorActions; // Color actions as an array
private JMenuBar menuBar = new JMenuBar(); // Window menu bar
private JMenu elementMenu; // Elements menu
private JMenu colorMenu; // Color menu
private Color elementColor = DEFAULT_ELEMENT_COLOR; // Current element color
private int elementType = DEFAULT_ELEMENT_TYPE; // Current element type
private JToolBar toolBar = new JToolBar(); // Window toolbar
private Sketcher theApp; // The application object
}