Java:如何从一个不可见的面板中获取检查颜色
是否可以读取不可见面板上鼠标位置的颜色? 我想有一个“不可见覆盖”的彩色编码图像。 我使用Robot类获取鼠标位置和颜色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
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();
工作完美。正是我想要的。谢谢。:)