📄 sketchframe.java
字号:
if(keystroke != null)
putValue(ACCELERATOR_KEY, keystroke);
}
FileAction(String name, String tooltip) {
this(name); // Call the other constructor
if(tooltip != null) // If there is tooltip text
putValue(SHORT_DESCRIPTION, tooltip); // ...squirrel it away
}
FileAction(String name, KeyStroke keystroke, String tooltip) {
this(name, keystroke); // Call the other constructor
if(tooltip != null) // If there is tooltip text
putValue(SHORT_DESCRIPTION, tooltip); // ...squirrel it away
}
// Event handler
public void actionPerformed(ActionEvent e) {
String name = (String)getValue(NAME);
if(name.equals(saveAction.getValue(NAME))) {
saveOperation();
} else if(name.equals(saveAsAction.getValue(NAME))) {
File file = showDialog("Save Sketch As",
"Save",
"Save the sketch",
's',
modelFile == null ? new File(
files.getCurrentDirectory(),
filename):modelFile);
if(file != null) {
if(file.exists() && !file.equals(modelFile))
if(JOptionPane.NO_OPTION == // Overwrite warning
JOptionPane.showConfirmDialog(SketchFrame.this,
file.getName()+" exists. Overwrite?",
"Confirm Save As",
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE))
return; // No file selected
saveSketch(file);
}
return;
} else if(name.equals(openAction.getValue(NAME))) {
checkForSave();
// Now open a sketch file
File file = showDialog(
"Open Sketch File", // Dialog window title
"Open", // button lable
"Read a sketch from file", // Button tooltip text
'o', // Shortcut character
null); // No file selected
if(file != null) // If a file was selected
openSketch(file); // then read it
} else if(name.equals(newAction.getValue(NAME))) {
checkForSave();
theApp.insertModel(new SketchModel()); // Insert new empty sketch
modelFile = null; // No file for it
filename = DEFAULT_FILENAME; // Default name
setTitle(frameTitle + files.getCurrentDirectory() +
"\\" + filename);
sketchChanged = false; // Not changed yet
} else if(name.equals(closeAction.getValue(NAME))) {
checkForSave();
System.exit(0);
} if(name.equals(printAction.getValue(NAME))) {
// Get a printing object
PrinterJob printJob = PrinterJob.getPrinterJob();
PrintService printer = printJob.getPrintService();
if(printer == null) {
JOptionPane.showMessageDialog(SketchFrame.this,
"No default printer available.",
"Printer Error",
JOptionPane.ERROR_MESSAGE);
return;
}
// The view is the page source
printJob.setPageable(theApp.getView()); // The view is the page source
if(printJob.printDialog()) { // Display print dialog
// If true is returned...
try {
printJob.print(); // then print
} catch(PrinterException pe) {
System.out.println(pe);
JOptionPane.showMessageDialog(SketchFrame.this,
"Error printing a sketch.",
"Printer Error",
JOptionPane.ERROR_MESSAGE);
}
}
}
}
}
class TypeAction extends AbstractAction {
TypeAction(String name, int typeID) {
super(name);
this.typeID = typeID;
String iconFileName = "Images/" + name + ".gif";
if(new File(iconFileName).exists())
putValue(SMALL_ICON, new ImageIcon(iconFileName));
}
TypeAction(String name, int typeID, String tooltip) {
this(name, typeID);
if(tooltip != null) // If there is a tooltip
putValue(SHORT_DESCRIPTION, tooltip); // ...squirrel it away
}
public void actionPerformed(ActionEvent e) {
elementType = typeID;
statusBar.setTypePane(typeID);
}
private int typeID;
}
// Handles color menu items
class ColorAction extends AbstractAction {
public ColorAction(String name, Color color) {
super(name);
this.color = color;
String iconFileName = "Images/" + name + ".gif";
if(new File(iconFileName).exists())
putValue(SMALL_ICON, new ImageIcon(iconFileName));
}
public ColorAction(String name, Color color, String tooltip) {
this(name, color);
if(tooltip != null) // If there is a tooltip
putValue(SHORT_DESCRIPTION, tooltip); // ...squirrel it away
}
public void actionPerformed(ActionEvent e) {
elementColor = color;
statusBar.setColorPane(color);
}
private Color color;
}
private JMenuItem addMenuItem(JMenu menu, Action action) {
JMenuItem item = menu.add(action); // Add the menu item
KeyStroke keystroke = (KeyStroke)action.getValue(action.ACCELERATOR_KEY);
if(keystroke != null)
item.setAccelerator(keystroke);
// remove this comments to disable icons
// item.setIcon(null); // Remove the icon
return item; // Return the menu item
}
public Color getElementColor() {
return elementColor;
}
public int getElementType() {
return elementType;
}
// Handle About menu action events
public void actionPerformed(ActionEvent e) {
if(e.getSource() == aboutItem) {
// Create about dialog with the menu item as parent
JOptionPane.showMessageDialog(this, // Parent
"Sketcher Copyright Ivor Horton 2001", // Message
"About Sketcher", // Title
JOptionPane.INFORMATION_MESSAGE); // Message type
} else if(e.getSource() == fontItem) { // Set the dialog window position
Rectangle bounds = getBounds();
fontDlg.setLocation(bounds.x + bounds.width/3, bounds.y + bounds.height/3);
fontDlg.setVisible(true); // Show the dialog
} else if(e.getSource() == customColorItem) {
Color color = JColorChooser.showDialog(this, "Select Custom Color",
elementColor);
if(color != null) {
elementColor = color;
statusBar.setColorPane(color);
}
}
}
// Class defining a general purpose message box
class AboutDialog extends JDialog implements ActionListener {
public AboutDialog(Frame parent, String title, String message) {
super(parent, title, true);
// If there was a parent, set dialog position inside
if(parent != null) {
Dimension parentSize = parent.getSize(); // Parent size
Point p = parent.getLocation(); // Parent position
setLocation(p.x+parentSize.width/4,p.y+parentSize.height/4);
}
// Create the message pane
JPanel messagePane = new JPanel();
messagePane.add(new JLabel(message));
getContentPane().add(messagePane);
// Create the button pane
JPanel buttonPane = new JPanel();
JButton button = new JButton("OK"); // Create OK button
buttonPane.add(button); // add to content pane
button.addActionListener(this);
getContentPane().add(buttonPane, BorderLayout.SOUTH);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
pack(); // Size window for components
setVisible(true);
}
// OK button action
public void actionPerformed(ActionEvent e) {
setVisible(false); // Set dialog invisible
dispose(); // Release the dialog resources
}
}
public Font getCurrentFont() {
return font;
}
public void setCurrentFont(Font font) {
this.font = font;
}
public String getSketchName() {
return filename;
}
private JPopupMenu popup = new JPopupMenu("General"); // Window pop-up
// Element color actions
private ColorAction redAction, yellowAction, greenAction, blueAction;
// Element type actions
private TypeAction lineAction, rectangleAction, circleAction, curveAction, textAction;
// File actions
private FileAction newAction, openAction, closeAction, saveAction, saveAsAction, printAction;
private XMLExportAction exportAction; // Stores action for XML export menu item
private XMLImportAction importAction; // Stores action for XML import menu item
private JMenuBar menuBar = new JMenuBar(); // Window menu bar
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;
private StatusBar statusBar = new StatusBar(); // Window status bar
// Sundry menu items
private JMenuItem aboutItem, fontItem;
private Font font = DEFAULT_FONT; // Current font
private FontDialog fontDlg; // The font dialog
private String frameTitle; // Frame title
private String filename = DEFAULT_FILENAME; // Current model file name
private File modelFile; // File for the current sketch
private boolean sketchChanged = false; // Model changed flag
private JFileChooser files; // File chooser dialog
private JMenuItem customColorItem;
private HashPrintRequestAttributeSet requestAttr = new HashPrintRequestAttributeSet();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -