Фокус события происходят, когда любой компонент набирает или теряет фокус ввода на графическом интерфейсе пользователя. Focus распространяется на все компоненты, которые могут получать ввод.

Чтобы справиться внимания события, класс должен реализовывать интерфейс FocusListener.

В следующем примере показано, как использовать события в фокусе Свинг:


/*

 * FocusEventDemo.java is a 1.4 example that requires

 * no other files.

 */



import java.util.Vector;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



public class FocusEventDemo extends JPanel

                            implements FocusListener {

    final static String newline = "\n";

    JTextArea display;



    public FocusEventDemo() {

        super(new GridBagLayout());

        GridBagLayout gridbag = (GridBagLayout)getLayout();

        GridBagConstraints c = new GridBagConstraints();



        c.fill = GridBagConstraints.HORIZONTAL;

        c.weightx = 1.0;  //Make column as wide as possible.

        JTextField textField = new JTextField("A TextField");

        textField.setMargin(new Insets(0,2,0,2));

        textField.addFocusListener(this);

        gridbag.setConstraints(textField, c);

        add(textField);



        c.weightx = 0.1;  //Widen every other column a bit, when possible. 

        c.fill = GridBagConstraints.NONE;

        JLabel label = new JLabel("A Label");

        label.setBorder(BorderFactory.createEmptyBorder(0,5,0,5));

        label.addFocusListener(this);

        gridbag.setConstraints(label, c);

        add(label);



        String comboPrefix = "ComboBox Item #";

        final int numItems = 15;

        Vector vector = new Vector(numItems);

        for (int i = 0; i < numItems; i++) {

            vector.addElement(comboPrefix + i);

        }

        JComboBox comboBox = new JComboBox(vector);

        comboBox.addFocusListener(this);

        gridbag.setConstraints(comboBox, c);

        add(comboBox);



        c.gridwidth = GridBagConstraints.REMAINDER;

        JButton button = new JButton("A Button");

        button.addFocusListener(this);

        gridbag.setConstraints(button, c);

        add(button);



        c.weightx = 0.0;   

        c.weighty = 0.1;

        c.fill = GridBagConstraints.BOTH;

        String listPrefix = "List Item #";

        Vector listVector = new Vector(numItems);

        for (int i = 0; i < numItems; i++) {

            listVector.addElement(listPrefix + i);

        }

        JList list = new JList(listVector);

        list.setSelectedIndex(1)//It's easier to see the focus change

                                  //if an item is selected.

        list.addFocusListener(this);

        JScrollPane listScrollPane = new JScrollPane(list);

        //We want to prevent the list's scroll bars

        //from getting the focus - even with the keyboard.

        //Note that in general we prefer setRequestFocusable

        //over setFocusable for reasons of accessibility, 

        //but this is to work around bug #4866958.

        listScrollPane.getVerticalScrollBar().setFocusable(false);

        listScrollPane.getHorizontalScrollBar().setFocusable(false);

        gridbag.setConstraints(listScrollPane, c);

        add(listScrollPane);



        c.weighty = 1.0//Make this row as tall as possible.

        c.gridheight = GridBagConstraints.REMAINDER;

        //Set up the area that reports focus-gained and focus-lost events.

        display = new JTextArea();

        display.setEditable(false);

        //The method setRequestFocusEnabled prevents a

        //component from being clickable, but it can still

        //get the focus through the keyboard - this ensures

        //user accessibility.

        display.setRequestFocusEnabled(false);

        display.addFocusListener(this);

        JScrollPane displayScrollPane = new JScrollPane(display);



        //Work around for bug #4866958.

        displayScrollPane.getHorizontalScrollBar().setFocusable(false);

        displayScrollPane.getVerticalScrollBar().setFocusable(false);

        gridbag.setConstraints(displayScrollPane, c);

        add(displayScrollPane);



        setPreferredSize(new Dimension(450450));

        setBorder(BorderFactory.createEmptyBorder(20,20,20,20));

    }



    public void focusGained(FocusEvent e) {

        displayMessage("Focus gained", e);

    }



    public void focusLost(FocusEvent e) {

        displayMessage("Focus lost", e);

    }



    void displayMessage(String prefix, FocusEvent e) {

        display.append(prefix

                       (e.isTemporary() " (temporary):" ":")

                       + e.getComponent().getClass().getName()

                       "; Opposite component: "

                       (e.getOppositeComponent() != null ?

                          e.getOppositeComponent().getClass().getName() "null")

                       + newline)

        display.setCaretPosition(display.getDocument().getLength());

    }



    /**

     * Create the GUI and show it.  For thread safety,

     * this method should be invoked from the

     * event-dispatching thread.

     */

    private static void createAndShowGUI() {

        //Make sure we have nice window decorations.

        JFrame.setDefaultLookAndFeelDecorated(true);



        //Create and set up the window.

        JFrame frame = new JFrame("FocusEventDemo");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



        //Create and set up the content pane.

        JComponent newContentPane = new FocusEventDemo();

        newContentPane.setOpaque(true)//content panes must be opaque

        frame.setContentPane(newContentPane);



        //Display the window.

        frame.pack();

        frame.setVisible(true);

    }



    public static void main(String[] args) {

        //Schedule a job for the event-dispatching thread:

        //creating and showing this application's GUI.

        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                createAndShowGUI();

            }

        });

    }

}

Действия происходят события, когда пользователь совершает какое-либо действие с помощью одного из следующих компонентов: JButton, JCheckBox, JComboBox, JTextField или JRadioButton.

Класс должен реализовать ActionListener интерфейс для обработки этих событий. ActionPerformed (ActionEvent) метод является единственным методом интерфейса ActionListener.

В следующем примере показано, как использовать события в действие Свинг:


import javax.swing.*;

import java.awt.*;

import java.awt.event.*;



public class SwingApplication implements ActionListener {

    

    private static String labelPrefix = "Number of button clicks: ";

    private int numClicks = 0;

    final JLabel label = new JLabel(labelPrefix + "0    ");

    

    public Component createComponents() {

        JButton button = new JButton("I'm a Swing button!");

        button.setMnemonic(KeyEvent.VK_I);

        button.addActionListener(this);

        label.setLabelFor(button);

        

        /*

         * An easy way to put space between a top-level container

         * and its contents is to put the contents in a JPanel

         * that has an "empty" border.

         */

        JPanel pane = new JPanel(new GridLayout(01));

        pane.add(button);

        pane.add(label);

        pane.setBorder(BorderFactory.createEmptyBorder(

                30//top

                30//left

                10//bottom

                30//right

                );

        

        return pane;

    }

    

    public void actionPerformed(ActionEvent e) {

        numClicks++;

        label.setText(labelPrefix + numClicks);

    }

    

    

    /**

     * Create the GUI and show it.  For thread safety,

     * this method should be invoked from the

     * event-dispatching thread.

     */

    private static void createAndShowGUI() {

        

        //Make sure we have nice window decorations.

        JFrame.setDefaultLookAndFeelDecorated(true);

        

        //Create and set up the window.

        JFrame frame = new JFrame("SwingApplication");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        

        SwingApplication app = new SwingApplication();

        Component contents = app.createComponents();

        frame.getContentPane().add(contents, BorderLayout.CENTER);

        

        //Display the window.

        frame.pack();

        frame.setVisible(true);

    }

    

    public static void main(String[] args) {

        //Schedule a job for the event-dispatching thread:

        //creating and showing this application's GUI.

        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                createAndShowGUI();

            }

        });

    }

}

События мыши порождаются следующим видам взаимодействия с пользователем:

  • A mouse click
  • A mouse entering a component’s area
  • A mouse leaving a component’s area

Любой компонент может генерировать эти события, и класс должен реализовать MouseListener интерфейс для их поддержки.

В следующем примере показано, как использовать мышь события в Свинг:


import javax.swing.*;



import java.awt.GridBagLayout;

import java.awt.GridBagConstraints;

import java.awt.Insets;

import java.awt.Color;

import java.awt.Dimension;



import java.awt.event.MouseListener;

import java.awt.event.MouseEvent;



public class MouseEventDemo extends JPanel 

                            implements MouseListener {

    BlankArea blankArea;

    JTextArea textArea;

    final static String newline = "\n";



    public MouseEventDemo() {

        super(new GridBagLayout());

        GridBagLayout gridbag = (GridBagLayout)getLayout();

        GridBagConstraints c = new GridBagConstraints();



        c.fill = GridBagConstraints.BOTH;

        c.gridwidth = GridBagConstraints.REMAINDER;

        c.weightx = 1.0;

        c.weighty = 1.0;



        c.insets = new Insets(1111);

        blankArea = new BlankArea(new Color(0.98f0.97f0.85f));

        gridbag.setConstraints(blankArea, c);

        add(blankArea);



        c.insets = new Insets(0000);

        textArea = new JTextArea();

        textArea.setEditable(false);

        JScrollPane scrollPane = new JScrollPane(textArea);

        scrollPane.setVerticalScrollBarPolicy(

                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        scrollPane.setPreferredSize(new Dimension(20075));

        gridbag.setConstraints(scrollPane, c);

        add(scrollPane);



        //Register for mouse events on blankArea and the panel.

        blankArea.addMouseListener(this);

        addMouseListener(this);



        setPreferredSize(new Dimension(450450));

        setBorder(BorderFactory.createEmptyBorder(20,20,20,20));

    }



    public void mousePressed(MouseEvent e) {

       saySomething("Mouse pressed (# of clicks: "

                    + e.getClickCount() ")", e);

    }



    public void mouseReleased(MouseEvent e) {

       saySomething("Mouse released (# of clicks: "

                    + e.getClickCount() ")", e);

    }



    public void mouseEntered(MouseEvent e) {

       saySomething("Mouse entered", e);

    }



    public void mouseExited(MouseEvent e) {

       saySomething("Mouse exited", e);

    }



    public void mouseClicked(MouseEvent e) {

       saySomething("Mouse clicked (# of clicks: "

                    + e.getClickCount() ")", e);

    }



    void saySomething(String eventDescription, MouseEvent e) {

        textArea.append(eventDescription + " detected on "

                        + e.getComponent().getClass().getName()

                        "." + newline);

        textArea.setCaretPosition(textArea.getDocument().getLength());

    }



    /**

     * Create the GUI and show it.  For thread safety,

     * this method should be invoked from the

     * event-dispatching thread.

     */

    private static void createAndShowGUI() {

        //Make sure we have nice window decorations.

        JFrame.setDefaultLookAndFeelDecorated(true);



        //Create and set up the window.

        JFrame frame = new JFrame("MouseEventDemo");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



        //Create and set up the content pane.

        JComponent newContentPane = new MouseEventDemo();

        newContentPane.setOpaque(true)//content panes must be opaque

        frame.setContentPane(newContentPane);



        //Display the window.

        frame.pack();

        frame.setVisible(true);

    }



    public static void main(String[] args) {

        //Schedule a job for the event-dispatching thread:

        //creating and showing this application's GUI.

        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                createAndShowGUI();

            }

        });

    }

}





import javax.swing.*;

import java.awt.Dimension;

import java.awt.Color;

import java.awt.Graphics;



public class BlankArea extends JLabel {

    Dimension minSize = new Dimension(100100);



    public BlankArea(Color color) {

        setBackground(color);

        setOpaque(true);

        setBorder(BorderFactory.createLineBorder(Color.black));

    }



    public Dimension getMinimumSize() {

        return minSize;

    }



    public Dimension getPreferredSize() {

        return minSize;

    }

}

События происходят движения мыши, когда мышь перемещается над компонентом. Любой компонент может генерировать эти события, и класс должен реализовать MouseMotionListener интерфейс для их поддержки.

В следующем примере показано, как использовать движение мышью события в Свинг:


import javax.swing.*;



import java.awt.Color;

import java.awt.Dimension;

import java.awt.Insets;

import java.awt.GridBagLayout;

import java.awt.GridBagConstraints;



import java.awt.event.MouseMotionListener;

import java.awt.event.MouseEvent;



public class MouseMotionEventDemo extends JPanel 

                                  implements MouseMotionListener {

    BlankArea blankArea;

    JTextArea textArea;

    static final String newline = "\n";



    public MouseMotionEventDemo() {

        super(new GridBagLayout());

        GridBagLayout gridbag = (GridBagLayout)getLayout();

        GridBagConstraints c = new GridBagConstraints();



        c.fill = GridBagConstraints.BOTH;

        c.gridwidth = GridBagConstraints.REMAINDER;

        c.weightx = 1.0;

        c.weighty = 1.0;



        c.insets = new Insets(1111);

        blankArea = new BlankArea(new Color(0.98f0.97f0.85f));

        gridbag.setConstraints(blankArea, c);

        add(blankArea);



        c.insets = new Insets(0000);

        textArea = new JTextArea();

        textArea.setEditable(false);

        JScrollPane scrollPane = new JScrollPane(textArea,

                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,

                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

        scrollPane.setPreferredSize(new Dimension(20075));

        gridbag.setConstraints(scrollPane, c);

        add(scrollPane);



        //Register for mouse events on blankArea and panel.

        blankArea.addMouseMotionListener(this);

        addMouseMotionListener(this);



        setPreferredSize(new Dimension(450450));

        setBorder(BorderFactory.createEmptyBorder(20,20,20,20));

    }



    public void mouseMoved(MouseEvent e) {

       saySomething("Mouse moved", e);

    }



    public void mouseDragged(MouseEvent e) {

       saySomething("Mouse dragged", e);

    }



    void saySomething(String eventDescription, MouseEvent e) {

        textArea.append(eventDescription 

                        " (" + e.getX() "," + e.getY() ")"

                        " detected on "

                        + e.getComponent().getClass().getName()

                        + newline);

        textArea.setCaretPosition(textArea.getDocument().getLength());

    }



    /**

     * Create the GUI and show it.  For thread safety,

     * this method should be invoked from the

     * event-dispatching thread.

     */

    private static void createAndShowGUI() {

        //Make sure we have nice window decorations.

        JFrame.setDefaultLookAndFeelDecorated(true);



        //Create and set up the window.

        JFrame frame = new JFrame("MouseMotionEventDemo");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



        //Create and set up the content pane.

        JComponent newContentPane = new MouseMotionEventDemo();

        newContentPane.setOpaque(true)//content panes must be opaque

        frame.setContentPane(newContentPane);



        //Display the window.

        frame.pack();

        frame.setVisible(true);

    }



    public static void main(String[] args) {

        //Schedule a job for the event-dispatching thread:

        //creating and showing this application's GUI.

        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                createAndShowGUI();

            }

        });

    }

}





import javax.swing.*;

import java.awt.Dimension;

import java.awt.Color;

import java.awt.Graphics;



public class BlankArea extends JLabel {

    Dimension minSize = new Dimension(100100);



    public BlankArea(Color color) {

        setBackground(color);

        setOpaque(true);

        setBorder(BorderFactory.createLineBorder(Color.black));

    }



    public Dimension getMinimumSize() {

        return minSize;

    }



    public Dimension getPreferredSize() {

        return minSize;

    }

}

Окна происходят события, когда пользователь открывает или закрывает окно объекта, такие как JFrame или JWindow. Любой компонент может генерировать эти события и класс должен реализовать WindowListener интерфейс для их поддержки.

В следующем примере показано, как использовать окно событий в Свинг:


import javax.swing.*;

import java.awt.*;

import java.awt.event.*;



public class WindowEventDemo extends JPanel

                             implements WindowListener,

                                        WindowFocusListener,

                                        WindowStateListener {

    final static String newline = "\n";

    final static String space = "    ";

    static JFrame frame;

    JTextArea display;



    public WindowEventDemo() {

        super(new BorderLayout());

        display = new JTextArea();

        display.setEditable(false);

        JScrollPane scrollPane = new JScrollPane(display);

        scrollPane.setPreferredSize(new Dimension(500450));

        add(scrollPane, BorderLayout.CENTER);



        frame.addWindowListener(this);

        frame.addWindowFocusListener(this);

        frame.addWindowStateListener(this);



        checkWM();

    }



    //Some window managers don't support all window states.

    //For example, dtwm doesn't support true maximization,

    //but mimics it by resizing the window to be the size

    //of the screen.  In this case the window does not fire

    //the MAXIMIZED_ constants on the window's state listener.

    //Microsoft Windows supports MAXIMIZED_BOTH, but not

    //MAXIMIZED_VERT or MAXIMIZED_HORIZ.

    public void checkWM() {

        Toolkit tk = frame.getToolkit();

        if (!(tk.isFrameStateSupported(Frame.ICONIFIED))) {

            displayMessage(

               "Your window manager doesn't support ICONIFIED.");

        }

        if (!(tk.isFrameStateSupported(Frame.MAXIMIZED_VERT))) {

            displayMessage(

               "Your window manager doesn't support MAXIMIZED_VERT.");

        }

        if (!(tk.isFrameStateSupported(Frame.MAXIMIZED_HORIZ))) {

            displayMessage(

               "Your window manager doesn't support MAXIMIZED_HORIZ.");

        }

        if (!(tk.isFrameStateSupported(Frame.MAXIMIZED_BOTH))) {

            displayMessage(

               "Your window manager doesn't support MAXIMIZED_BOTH.");

        else {

            displayMessage(

               "Your window manager supports MAXIMIZED_BOTH.");

        }

    }



    public void windowClosing(WindowEvent e) {

        displayMessage("WindowListener method called: windowClosing.");



        //A pause so user can see the message before

        //the window actually closes.

        ActionListener task = new ActionListener() {

            boolean alreadyDisposed = false;

            public void actionPerformed(ActionEvent e) {

                if (!alreadyDisposed) {

                    alreadyDisposed = true;

                    frame.dispose();

                else //make sure the program exits

                    System.exit(0);

                }

            }

        };

        Timer timer = new Timer(500, task)//fire every half second

        timer.setInitialDelay(2000);        //first delay 2 seconds

        timer.start();

    }



    public void windowClosed(WindowEvent e) {

        //This will only be seen on standard output.

        displayMessage("WindowListener method called: windowClosed.");

    }



    public void windowOpened(WindowEvent e) {

        displayMessage("WindowListener method called: windowOpened.");

    }



    public void windowIconified(WindowEvent e) {

        displayMessage("WindowListener method called: windowIconified.");

    }



    public void windowDeiconified(WindowEvent e) {

        displayMessage("WindowListener method called: windowDeiconified.");

    }



    public void windowActivated(WindowEvent e) {

        displayMessage("WindowListener method called: windowActivated.");

    }



    public void windowDeactivated(WindowEvent e) {

        displayMessage("WindowListener method called: windowDeactivated.");

    }



    public void windowGainedFocus(WindowEvent e) {

        displayMessage("WindowFocusListener method called: windowGainedFocus.");

    }



    public void windowLostFocus(WindowEvent e) {

        displayMessage("WindowFocusListener method called: windowLostFocus.");

    }



    public void windowStateChanged(WindowEvent e) {

        displayStateMessage(

          "WindowStateListener method called: windowStateChanged.", e);

    }



    void displayMessage(String msg) {

        display.append(msg + newline);

        System.out.println(msg);

    }



    void displayStateMessage(String prefix, WindowEvent e) {

        int state = e.getNewState();

        int oldState = e.getOldState();

        String msg = prefix

                   + newline + space

                   "New state: "

                   + convertStateToString(state)

                   + newline + space

                   "Old state: "

                   + convertStateToString(oldState);

        display.append(msg + newline);

        System.out.println(msg);

    }



    String convertStateToString(int state) {

        if (state == Frame.NORMAL) {

            return "NORMAL";

        }

        if ((state & Frame.ICONIFIED!= 0) {

            return "ICONIFIED";

        }

        //MAXIMIZED_BOTH is a concatenation of two bits, so

        //we need to test for an exact match.

        if ((state & Frame.MAXIMIZED_BOTH== Frame.MAXIMIZED_BOTH) {

            return "MAXIMIZED_BOTH";

        }

        if ((state & Frame.MAXIMIZED_VERT!= 0) {

            return "MAXIMIZED_VERT";

        }

        if ((state & Frame.MAXIMIZED_HORIZ!= 0) {

            return "MAXIMIZED_HORIZ";

        }

        return "UNKNOWN";

    }



    /**

     * Create the GUI and show it.  For thread safety,

     * this method should be invoked from the

     * event-dispatching thread.

     */

    private static void createAndShowGUI() {

        //Make sure we have nice window decorations.

        JFrame.setDefaultLookAndFeelDecorated(true);



        //Create and set up the window.

        frame = new JFrame("WindowEventDemo");

        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);



        //Create and set up the content pane.

        JComponent newContentPane = new WindowEventDemo();

        newContentPane.setOpaque(true)//content panes must be opaque

        frame.setContentPane(newContentPane);



        //Display the window.

        frame.pack();

        frame.setVisible(true);

    }



    public static void main(String[] args) {

        //Schedule a job for the event-dispatching thread:

        //creating and showing this application's GUI.

        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                createAndShowGUI();

            }

        });

    }

}

Основные события происходят, когда нажата клавиша на клавиатуре. Любой компонент может генерировать эти события, и класс должен реализовать KeyListener интерфейс для их поддержки.

В следующем примере показано, как использовать ключевые события в Свинг:


import javax.swing.*;

import java.awt.event.*;

import java.awt.BorderLayout;

import java.awt.Dimension;



public class KeyEventDemo extends JPanel 

                          implements KeyListener,

                                     ActionListener {

    JTextArea displayArea;

    JTextField typingArea;

    static final String newline = "\n";



    public KeyEventDemo() {

        super(new BorderLayout());



        JButton button = new JButton("Clear");

        button.addActionListener(this);



        typingArea = new JTextField(20);

        typingArea.addKeyListener(this);



        //Uncomment this if you wish to turn off focus

        //traversal.  The focus subsystem consumes

        //focus traversal keys, such as Tab and Shift Tab.

        //If you uncomment the following line of code, this

        //disables focus traversal and the Tab events will

        //become available to the key event listener.

        //typingArea.setFocusTraversalKeysEnabled(false);



        displayArea = new JTextArea();

        displayArea.setEditable(false);

        JScrollPane scrollPane = new JScrollPane(displayArea);

        scrollPane.setPreferredSize(new Dimension(375125));



        add(typingArea, BorderLayout.PAGE_START);

        add(scrollPane, BorderLayout.CENTER);

        add(button, BorderLayout.PAGE_END);

    }



    /** Handle the key typed event from the text field. */

    public void keyTyped(KeyEvent e) {

        displayInfo(e, "KEY TYPED: ");

    }



    /** Handle the key pressed event from the text field. */

    public void keyPressed(KeyEvent e) {

        displayInfo(e, "KEY PRESSED: ");

    }



    /** Handle the key released event from the text field. */

    public void keyReleased(KeyEvent e) {

        displayInfo(e, "KEY RELEASED: ");

    }



    /** Handle the button click. */

    public void actionPerformed(ActionEvent e) {

        //Clear the text components.

        displayArea.setText("");

        typingArea.setText("");



        //Return the focus to the typing area.

        typingArea.requestFocusInWindow();

    }



    /*

     * We have to jump through some hoops to avoid

     * trying to print non-printing characters 

     * such as Shift.  (Not only do they not print, 

     * but if you put them in a String, the characters

     * afterward won't show up in the text area.)

     */

    protected void displayInfo(KeyEvent e, String s){

        String keyString, modString, tmpString,

               actionString, locationString;



        //You should only rely on the key char if the event

        //is a key typed event.

        int id = e.getID();

        if (id == KeyEvent.KEY_TYPED) {

            char c = e.getKeyChar();

            keyString = "key character = '" + c + "'";

        else {

            int keyCode = e.getKeyCode();

            keyString = "key code = " + keyCode

                        " ("

                        + KeyEvent.getKeyText(keyCode)

                        ")";

        }



        int modifiers = e.getModifiersEx();

        modString = "modifiers = " + modifiers;

        tmpString = KeyEvent.getModifiersExText(modifiers);

        if (tmpString.length() 0) {

            modString += " (" + tmpString + ")";

        else {

            modString += " (no modifiers)";

        }



        actionString = "action key? ";

        if (e.isActionKey()) {

            actionString += "YES";

        else {

            actionString += "NO";

        }



        locationString = "key location: ";

        int location = e.getKeyLocation();

        if (location == KeyEvent.KEY_LOCATION_STANDARD) {

            locationString += "standard";

        else if (location == KeyEvent.KEY_LOCATION_LEFT) {

            locationString += "left";

        else if (location == KeyEvent.KEY_LOCATION_RIGHT) {

            locationString += "right";

        else if (location == KeyEvent.KEY_LOCATION_NUMPAD) {

            locationString += "numpad";

        else // (location == KeyEvent.KEY_LOCATION_UNKNOWN)

            locationString += "unknown";

        }



        displayArea.append(s + newline

                           "    " + keyString + newline

                           "    " + modString + newline

                           "    " + actionString + newline

                           "    " + locationString + newline);

        displayArea.setCaretPosition(displayArea.getDocument().getLength());

    }



    /**

     * Create the GUI and show it.  For thread safety,

     * this method should be invoked from the

     * event-dispatching thread.

     */

    private static void createAndShowGUI() {

        //Make sure we have nice window decorations.

        JFrame.setDefaultLookAndFeelDecorated(true);



        //Create and set up the window.

        JFrame frame = new JFrame("KeyEventDemo");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



        //Create and set up the content pane.

        JComponent newContentPane = new KeyEventDemo();

        newContentPane.setOpaque(true)//content panes must be opaque

        frame.setContentPane(newContentPane);



        //Display the window.

        frame.pack();

        frame.setVisible(true);

    }



    public static void main(String[] args) {

        //Schedule a job for the event-dispatching thread:

        //creating and showing this application's GUI.

        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                createAndShowGUI();

            }

        });

    }

}


import java.applet.*;

import java.awt.*;

import java.awt.event.*;



public class testENTER extends Applet implements KeyListener {

    

    TextField t;

    

    public void init(){

        TextField t = new TextField("press ENTER");

        add(t);

        t.addKeyListener(this);

    }

    

    public void keyTyped(KeyEvent e) {}

    public void keyReleased(KeyEvent e) {}

    public void keyPressed(KeyEvent e) {

        

        int key = e.getKeyCode();

        

        if (key == KeyEvent.VK_ENTER) {

            Toolkit.getDefaultToolkit().beep();

            System.out.println("ENTER pressed");

        }

    }

}

Или короткие версии с помощью класса KeyAdapter.


import java.applet.*;

import java.awt.*;

import java.awt.event.*;



public class testENTER extends Applet {



  TextField t;



  public void init(){



    TextField t = new TextField("press ENTER");

    add(t);



    t.addKeyListener

      (new KeyAdapter() {

         public void keyPressed(KeyEvent e) {

           int key = e.getKeyCode();

           if (key == KeyEvent.VK_ENTER) {

              Toolkit.getDefaultToolkit().beep();   

              System.out.println("ENTER pressed");

              }

           }

         }

      );

    }

}

Swing имеет следующие виды мероприятий:

Действие события:

Действия происходят события, когда пользователь совершает какое-либо действие с помощью одного из следующих компонентов: JButton, JCheckBox, JComboBox, JTextField или JRadioButton.

Класс должен реализовать ActionListener интерфейс для обработки этих событий. ActionPerformed (ActionEvent) метод является единственным методом интерфейса ActionListener.

Настройка события:

Настройка события происходят при перемещении компонента JScrollBar. Для обработки этих событий, класс должен реализовывать интерфейс AdjustmentListener. AdjustmentValueChanged (AdjustmentEvent) метод является единственным методом, в интерфейсе AdjustmentListener.

Фокусе событий

Фокус события происходят, когда любой компонент набирает или теряет фокус ввода на графическом интерфейсе пользователя. Focus распространяется на все компоненты, которые могут получать ввод.

Чтобы справиться внимания события, класс должен реализовывать интерфейс FocusListener.

Пункт события:

Пункт события происходят, когда элемент выбран или выбран ни по одному из следующих компонентов: JButton, JCheckBox, JComboBox или JRadioButton. Класс должен реализовывать интерфейс ItemListener для обработки этих событий.

Ключевые события:

Основные события происходят, когда нажата клавиша на клавиатуре. Любой компонент может генерировать эти события, и класс должен реализовать KeyListener интерфейс для их поддержки.

События мыши:

События мыши порождаются следующим видам взаимодействия с пользователем:

  • A mouse click
  • A mouse entering a component’s area
  • A mouse leaving a component’s area

Любой компонент может генерировать эти события, и класс должен реализовать MouseListener интерфейс для их поддержки.

Движения мыши события:

События происходят движения мыши, когда мышь перемещается над компонентом. Любой компонент может генерировать эти события, и класс должен реализовать MouseMotionListener интерфейс для их поддержки.

Окно события:

Окна происходят события, когда пользователь открывает или закрывает окно объекта, такие как JFrame или JWindow. Любой компонент может генерировать эти события и класс должен реализовать WindowListener интерфейс для их поддержки.

Компонент на панели можно быстро вызывать события на родителей Frame. Таким образом, мы можем поместить всю логику в одном месте. В этом примере фрейм содержит кнопки 1 и 2 группы с пуговицами. Первый кнопки на панели будет генерировать событие для кнопки на корпусе, а вторая кнопка панели вызовет просьбой закрыть рамы и приложений.


[TestEventPanel.java]



import java.awt.*;

import java.awt.event.*;



public class TestEventPanel extends Panel {

  Button b1,b2;

 

  TestEventPanel(){

    super();

    setLayout(new FlowLayout());

    setBackground(new Color(0).black);

    b1 = new Button("call event on the frame");

    add(b1);

    b2 = new Button("close the parent frame");

    add(b2);

    }

}

Frame после добавления группы, будет действовать как ActionListener событий на 2 кнопки управления.


[TestEventFrame.java]

        

import java.awt.*;

import java.awt.event.*;



public class TestEventFrame extends Frame implements

        ActionListener, WindowListener  {

    TestEventPanel p1;

    Button b1;

    

    TestEventFrame(String title){

        super(title);

        setLayout(new FlowLayout());

        p1 = new TestEventPanel();

        

        b1 = new Button("A dummy button");

        add(b1);

        

        // the Panel with 2 buttons on it

        add(p1);

        createFrame();

        

        

        // add the actionlistener

        b1.addActionListener(this);

        p1.b1.addActionListener(this);

        p1.b2.addActionListener(this);

        addWindowListener(this);

    }

    

    void createFrame() {

        Dimension d = getToolkit().getScreenSize();

        setLocation(d.width/4,d.height/3);

        setSize(400,100);

        setVisible(true);

    }

    

    public void actionPerformed(ActionEvent ae){

        

        if (ae.getSource()==p1.b1) {

            System.out.println(ae.getActionCommand());

            ActionEvent new_ae =

                    new ActionEvent(b1,

                    ActionEvent.ACTION_PERFORMED,

                    "Panel b1 is calling the dummy button");

            b1.dispatchEvent(new_ae);

        }

        

        if (ae.getSource()==b1) {

            System.out.println("dummy receive :" + ae.getActionCommand());

        }

        

        if (ae.getSource()==p1.b2) {

            System.out.println(ae.getActionCommand());

            processEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));

        }

        

    }

    

    public void windowClosing(WindowEvent e) {

        this.dispose();

        System.exit(0);

    }

    public void windowActivated(WindowEvent e) { }

    public void windowDeactivated(WindowEvent e) { }

    public void windowDeiconified(WindowEvent e) { }

    public void windowClosed(WindowEvent e) { }

    public void windowIconified(WindowEvent e) { }

    public void windowOpened(WindowEvent e) { }

}

И, наконец:




[TestEventApplet.java]

        

import java.awt.*;



public class TestEventApplet extends java.applet.Applet {

    TestEventFrame myTestEventFrame;

    

    public void init() {

        myTestEventFrame =

                new TestEventFrame("TestEvent Frame");

    }

}

Пункт события происходят, когда элемент выбран или выбран ни по одному из следующих компонентов: JButton, JCheckBox, JComboBox или JRadioButton. Класс должен реализовывать интерфейс ItemListener для обработки этих событий.

В следующем примере показано, как использовать события в пункт Свинг:


import java.awt.event.*;

import javax.swing.*;

import java.awt.*;



public class SelectItem extends JFrame implements ItemListener {

    BorderLayout bord = new BorderLayout();

    JTextField result = new JTextField(27);

    JComboBox pick = new JComboBox();



    public SelectItem() {

        super("Select Item");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        pick.addItemListener(this);

        pick.addItem("Navigator");

        pick.addItem("Internet Explorer");

        pick.addItem("Opera");

        pick.setEditable(false);

        result.setHorizontalAlignment(SwingConstants.CENTER);

        result.setEditable(false);

        JPanel pane = new JPanel();

        pane.setLayout(bord);

        pane.add(result, "South");

        pane.add(pick, "Center");

        setContentPane(pane);

        pack();

        setVisible(true);

    }



    public static void main(String[] arguments) {

        JFrame frame = new SelectItem();

    }



    public void itemStateChanged(ItemEvent evt) {

        Object source = evt.getSource();

        if (source == pick) {

            Object newPick = evt.getItem();

            result.setText(newPick.toString() " is the selection.");

        }

        repaint();

    }

}