gpt4 book ai didi

Java - 突破 JPanel 的限制

转载 作者:行者123 更新时间:2023-12-02 06:47:41 25 4
gpt4 key购买 nike

我有以下疑问:是否可以使用鼠标监听器将“鼠标左键单击事件”超出组件的限制?或者我应该用另一种方法尝试这个?

我的问题如下。我正在创建一个适合我的项目的所见即所得面板。该面板与另一个面板是同级的,后者显示根据用户选择加载的图像。例如,我需要获取该图像的背景颜色。单击任何颜色时,都会更改所见即所得面板的背景颜色。我正在使用 Robot 类来获取像素的颜色,但这仅在图像和颜色选择器位于同一面板中时才有效,但它们不会。

更新:这段代码就是我的意思。主机有两个独立的JFrame。我需要通过单击 MouseColorPane 来获取 ImageLoader 上图像的 RGB 颜色。在这种情况下,Robot 只能获取 JLabel 的黑色边框。

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class WhatsMyColor {

public static void main(String[] args) throws IOException {
new WhatsMyColor();
}

public WhatsMyColor() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
final MouseColorPane mcp = new MouseColorPane();
frame.add(mcp,BorderLayout.CENTER);

ImageLoader il = new ImageLoader();
frame.add(il,BorderLayout.NORTH);
frame.setSize(800, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);

} catch (Exception exp) {
exp.printStackTrace();
}

}
});
}

public class ImageLoader extends JPanel {

ImageLoader(){
BufferedImage img = null;
try {img = ImageIO.read(new File("src/monkey-icon128.png"));} catch (IOException e1) {e1.printStackTrace();}
add(new JLabel (new ImageIcon (img)));
BufferedImage img2 = null;
try {img2 = ImageIO.read(new File("src/monkey-icon128.png"));} catch (IOException e1) {e1.printStackTrace();}
add(new JLabel (new ImageIcon (img2)));
}
}

public class MouseColorPane extends JPanel {

private Robot robot;
private JLabel color;

public MouseColorPane() throws AWTException {


setLayout(new GridBagLayout());

color = new JLabel();
color.setBorder(BorderFactory.createLineBorder(Color.black));
color.setPreferredSize(new Dimension(100,100));
color.setFocusable(false);
color.setOpaque(true);
color.setFocusTraversalPolicyProvider(false);
color.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent arg0) {}
@Override
public void mousePressed(MouseEvent arg0) {}
@Override
public void mouseExited(MouseEvent arg0) {}
@Override
public void mouseEntered(MouseEvent arg0) {}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
PointerInfo pi;
pi = MouseInfo.getPointerInfo();
updateColor(pi.getLocation());
}
});
add(color);

robot = new Robot();
setVisible(true);

}

protected void updateColor(Point p) {
Color pixelColor = robot.getPixelColor(p.x, p.y);
color.setBackground(pixelColor);

}


}

}

最佳答案

您可以从 Zoom 了解到什么是可能的,它使用 Robot 捕获桌面的补丁并使用 getRGB() 来确定颜色。单击并拖动即可捕获;将鼠标悬停在上面即可查看包含像素 RGB 分量的工具提示。

image

关于Java - 突破 JPanel 的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18448659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com