您的位置:首页 > 编程语言 > Java开发

Java基础之处理事件——使窗口处理自己的事件(Skethcer 1 handing its own closing event)

2013-12-22 15:04 537 查看
控制台程序。

为表示事件的常量使用标识符可以直接启用组件对象的特定事件组。调用组件的enableEvent()方法,并把想要启用事件的标识符传送为参数,但这只在不使用监视器的情况下有效。注册监听器会自动启用监听器想要监听的事件,所以不需要调用enableEvent()方法。只有当希望对象能处理自己的某些事件时,才调用enableEvent()方法,但使用监听器可以达到相同的效果。

使用监听器对象是处理事件的首选方式,因为更容易直接启用对象的事件,代码也更简洁。

// Main window for the Sketcher application
import javax.swing.*;
import static java.awt.event.InputEvent.*;                             // For modifier constants
import java.awt.event.WindowEvent;

@SuppressWarnings("serial")
public class SketcherFrame extends JFrame {
// Constructor
public SketcherFrame(String title) {
setTitle(title);                                                   // Set the window title

setJMenuBar(menuBar);                                              // Add the menu bar to the window

JMenu fileMenu = new JMenu("File");                                // Create File menu
JMenu elementMenu = new JMenu("Elements");                         // Create Elements menu
fileMenu.setMnemonic('F');                                         // Create shortcut
elementMenu.setMnemonic('E');                                      // Create shortcut

// Construct the file drop-down menu
newItem = fileMenu.add("New");                                     // Add New item
openItem = fileMenu.add("Open");                                   // Add Open item
closeItem = fileMenu.add("Close");                                 // Add Close item
fileMenu.addSeparator();                                           // Add separator
saveItem = fileMenu.add("Save");                                   // Add Save item
saveAsItem = fileMenu.add("Save As...");                           // Add Save As item
fileMenu.addSeparator();                                           // Add separator
printItem = fileMenu.add("Print");                                 // Add Print item

// Add File menu accelerators
newItem.setAccelerator(KeyStroke.getKeyStroke('N',CTRL_DOWN_MASK ));
openItem.setAccelerator(KeyStroke.getKeyStroke('O', CTRL_DOWN_MASK));
saveItem.setAccelerator(KeyStroke.getKeyStroke('S', CTRL_DOWN_MASK));
printItem.setAccelerator(KeyStroke.getKeyStroke('P', CTRL_DOWN_MASK));

// Construct the Element drop-down menu
elementMenu.add(lineItem = new JRadioButtonMenuItem("Line", true));
elementMenu.add(rectangleItem = new JRadioButtonMenuItem("Rectangle", false));
elementMenu.add(circleItem = new JRadioButtonMenuItem("Circle", false));
elementMenu.add(curveItem = new JRadioButtonMenuItem("Curve", false));
ButtonGroup types = new ButtonGroup();
types.add(lineItem);
types.add(rectangleItem);
types.add(circleItem);
types.add(curveItem);

// Add element type accelerators
lineItem.setAccelerator(KeyStroke.getKeyStroke('L', CTRL_DOWN_MASK));
rectangleItem.setAccelerator(KeyStroke.getKeyStroke('E', CTRL_DOWN_MASK));
circleItem.setAccelerator(KeyStroke.getKeyStroke('I', CTRL_DOWN_MASK));
curveItem.setAccelerator(KeyStroke.getKeyStroke('V', CTRL_DOWN_MASK));

elementMenu.addSeparator();
JMenu colorMenu = new JMenu("Color");                              // Color submenu
elementMenu.add(colorMenu);                                        // Add the submenu
colorMenu.add(redItem = new JCheckBoxMenuItem("Red", false));
colorMenu.add(yellowItem = new JCheckBoxMenuItem("Yellow", false));
colorMenu.add(greenItem = new JCheckBoxMenuItem("Green", false));
colorMenu.add(blueItem = new JCheckBoxMenuItem("Blue", true));

// Add element color accelerators
redItem.setAccelerator(KeyStroke.getKeyStroke('R', CTRL_DOWN_MASK));
yellowItem.setAccelerator(KeyStroke.getKeyStroke('Y', CTRL_DOWN_MASK));
greenItem.setAccelerator(KeyStroke.getKeyStroke('G', CTRL_DOWN_MASK));
blueItem.setAccelerator(KeyStroke.getKeyStroke('B', CTRL_DOWN_MASK));

menuBar.add(fileMenu);                                             // Add the file menu
menuBar.add(elementMenu);                                          // Add the element menu
enableEvents(WINDOW_EVENT_MASK);                                   // Enable window events
}

// Handle window events
protected void processWindowEvent(WindowEvent e) {
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
dispose();                                                       // Release resources
System.exit(0);                                                  // Exit the program
}
super.processWindowEvent(e);                                       // Pass on the event
}

private JMenuBar menuBar = new JMenuBar();     // Window menu bar

// File menu items
private JMenuItem newItem,  openItem,   closeItem,
saveItem, saveAsItem, printItem;

// Element menu items
private JRadioButtonMenuItem lineItem,  rectangleItem, circleItem,  // Types
curveItem, textItem;
private JCheckBoxMenuItem    redItem,   yellowItem,                 // Colors
greenItem, blueItem ;
}


// Sketching application
import javax.swing.*;
import java.awt.*;

import javax.swing.SwingUtilities;

public class Sketcher {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createWindow();
}
});
}

public static void createWindow(){
window = new SketcherFrame("Sketcher");                            // Create the app window
Toolkit theKit = window.getToolkit();                              // Get the window toolkit
Dimension wndSize = theKit.getScreenSize();                        // Get screen size

// Set the position to screen center & size to half screen size
window.setSize(wndSize.width/2, wndSize.height/2);                 // Set window size
window.setLocationRelativeTo(null);                                // Center window
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

window.setVisible(true);
}

private static SketcherFrame window;                                 // The application window
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐