将鼠标光标移动到角落时如何显示条形图?

时间:2015-08-04 08:56:28

标签: java swing

在Windows 8中,当用户将鼠标光标向右移动时,会显示带有一些按钮的控制栏。那么,这可以在java应用程序中完成吗?我希望当用户将鼠标光标移动到左边时,会弹出类似的控制栏,弹出一些按钮。有可能吗? 注意:我的java应用程序适合屏幕的宽度和高度(全屏应用程序)。

2 个答案:

答案 0 :(得分:1)

您可以在正在使用的框架的MouseMotionListener上使用contentPane。并在MouseMotionListener内获取鼠标位置并与角点像素的值进行比较。

您可以执行类似

的操作
getContentPane().addMouseMotionListener(new MouseMotionAdapter(){

    @Override
    public void mouseMoved(MouseEvent e) {
        if(e.getX() == 0) //for left corner
            charmsPanel.setVisible(true);   
    }

});

答案 1 :(得分:1)

以下是基于@VamshiAlladi的答案的例子:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Example extends JFrame {

    public Example() {

        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int width = (int) screenSize.getWidth();
        int height = (int) screenSize.getHeight();

        JPanel glass = (JPanel) getGlassPane();
        glass.setLayout(new BorderLayout());

        JPanel bar = new JPanel();
        bar.setLayout(new GridLayout(10, 1));
        for (int i = 1; i <= 10; i++) {
            bar.add(new JButton("Button " + i));
        }

        addMouseMotionListener(new MouseMotionListener() {
            public void mouseMoved(MouseEvent e) {
                PointerInfo a = MouseInfo.getPointerInfo();
                Point b = a.getLocation();
                int x = (int) b.getX();
                int y = (int) b.getY();
                if (x > Example.this.getWidth() - 10) {
                    glass.setVisible(true);
                } else {
                    glass.setVisible(false);
                }
                revalidate();
                repaint();
            }

            public void mouseDragged(MouseEvent e) {
            }
        });

        setSize(width, height);
        glass.add(bar, BorderLayout.EAST);
        setVisible(true);

    }

    public static void main(String[] args) {
        new Example();
    }

}

修改

为什么要使用GlassPane而不只是新JPanel? - 如果您的ContentPane区域中有显示栏的区域,则(例如)玻璃板&#34;覆盖&#34;内容窗格。使用JPanel,您必须更换组件(这可能会导致问题)。