Как использовать мышь событий в Swing

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

  • 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;

    }

}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>