Java基础之处理事件——使窗口处理自己的事件(Skethcer 1 handing its own closing event)
2013-12-22 15:04
537 查看
控制台程序。
为表示事件的常量使用标识符可以直接启用组件对象的特定事件组。调用组件的enableEvent()方法,并把想要启用事件的标识符传送为参数,但这只在不使用监视器的情况下有效。注册监听器会自动启用监听器想要监听的事件,所以不需要调用enableEvent()方法。只有当希望对象能处理自己的某些事件时,才调用enableEvent()方法,但使用监听器可以达到相同的效果。
使用监听器对象是处理事件的首选方式,因为更容易直接启用对象的事件,代码也更简洁。
为表示事件的常量使用标识符可以直接启用组件对象的特定事件组。调用组件的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 }
相关文章推荐
- Java基础之处理事件——applet中语义事件的处理(Lottery 1)
- Java基础-事件处理
- Java基础:Swing中的事件处理详细资料
- Java基础之处理事件——使用适配器类(Sketcher 3 using an Adapter class)
- JAVA基础:GUI事件处理及布局要点
- 【Java基础之事件处理】代码库(四)
- Java基础之处理事件——实现低级事件监听器(Sketcher 2 implementing a low-level listener)
- [Java] ActionEvent 事件处理
- 无边框窗口、控件的事件处理之nativeEvent(Qt 5.5.0)
- Java基础之处理事件——应用程序中的语义事件监听器(Sketcher 5 with element color listeners)
- Java Swing界面编程(21)---事件处理:窗口事件
- Java笔记(10)-图形界面设计、Swing、窗口、JFrame、常用组件和布局、处理事件、MVC结构、对话框、GUI
- Java基础之处理事件——使用动作Action(Sketcher 6 using Action objects)
- jQuery源码分析-10事件处理-Event-概述和基础知识
- [DOM Event Learning] Section 3 jQuery事件处理基础 on(), off()和one()方法使用
- 【Java学习笔记】50:DocumentEvent事件的处理
- Qt中事件处理的方法(三种处理方法,四种覆盖event函数,notify函数,event过滤,事件处理器。然后继续传递给父窗口。可观察QWidget::event的源码,它是虚拟保护函数,可改写)
- QT事件过滤器(QT事件处理的5个层次:自己覆盖或过滤,父窗口过滤,Application过滤与通知)
- Android疯狂讲义中,基于回调的事件处理,报错Binary XML file line #8: Error inflating class org.crazyit.event.MyButton
- java swing基础和事件处理