Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何从一个不可见的面板中获取检查颜色_Java_Colors_Jlayeredpane - Fatal编程技术网

Java:如何从一个不可见的面板中获取检查颜色

Java:如何从一个不可见的面板中获取检查颜色,java,colors,jlayeredpane,Java,Colors,Jlayeredpane,是否可以读取不可见面板上鼠标位置的颜色? 我想有一个“不可见覆盖”的彩色编码图像。 我使用Robot类获取鼠标位置和颜色 public void mouseClicked(MouseEvent evt){ Robot r = new Robot(); Point p = evt.getLocationOnScreen(); Color color = r.getPixelColor(p.x,p.y); System.out.pri

是否可以读取不可见面板上鼠标位置的颜色? 我想有一个“不可见覆盖”的彩色编码图像。 我使用Robot类获取鼠标位置和颜色

public void mouseClicked(MouseEvent evt){
        Robot r = new Robot(); 
        Point p = evt.getLocationOnScreen();
        Color color = r.getPixelColor(p.x,p.y);
        System.out.println(color);                  
 }
它在我的可见图像上运行良好,但是如果我将图像设置为不可见,它将完全被忽略。 除了不可见的图像/面板外,有没有办法获得相同的结果(获得鼠标位置的颜色)

编辑:还有一个问题(希望可以)可以帮助我: 是否可以获取单个JLayeredPane的颜色(鼠标位置)? 我使用几个带有小图像的红色窗格。它们都有相同的大小,但部分是透明的,因此它们创建了一个大图像,我可以在其中更改图像的单个部分。
我的问题也会得到解决,如果我能够获得单个JLayeredPane的颜色(我的鼠标位置),分别可以检查它是否透明

您可以创建任何组件的
buffereImage
。使用
buffereImage
后,可以使用
getRGB(…)
方法获取像素的颜色

创建任何组件的
buffereImage
的最简单方法是使用类。可以创建框架、框架上的任何组件或组件的任何矩形区域的图像

在下面的示例中,右侧的标签是不可见组件的图像。当您在左侧的空标签周围移动鼠标时,背景将发生变化,以指示不可见组件上像素的颜色:

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.event.*;

public class InvisibleImage extends JPanel
{
    public InvisibleImage()
    {
        setLayout( new GridLayout(0, 2) );

        JLabel invisible = new JLabel( new ImageIcon("mickeyred.jpg") );
        invisible.setVisible( false );

        BufferedImage image = ScreenImage.createImage( invisible );

        JLabel panel = new JLabel();
        panel.setOpaque( true );
        add(panel);

        JLabel label = new JLabel( new ImageIcon( image ) );
        add(label);

        panel.addMouseMotionListener( new MouseMotionAdapter()
        {
            @Override
            public void mouseMoved(MouseEvent e)
            {
                int pixelColor = image.getRGB(e.getX(), e.getY());
                Color color = new Color( pixelColor );
                panel.setText( color.toString() );
                panel.setBackground( color );
            }
        });
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("InvisibleImage");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new InvisibleImage() );
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args) throws Exception
    {
        java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
    }
}
如果不想使用
屏幕图像
类,则可以使用以下方法创建BuffereImage:

invisible.setSize( invisible.getPreferredSize() );
Dimension d = invisible.getSize();
BufferedImage image = new BufferedImage(d.width, d.height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
invisible.print( g2d );
g2d.dispose();

工作完美。正是我想要的。谢谢。:)