Java Swing: cómo obtener el color de un píxel de un JFrame

William F .:

Estoy intentando conseguir el color de un JFrame Swing, elegido para un (x,y)píxel del componente.

Por ejemplo, me gustaría saber el color de un determinado JFrameen su (0,0)punto.

La razón es que mi componente es una capa parcialmente transparente, con una JPaneldebajo. Para los píxeles que son opacos, los eventos de ratón deben ser tratados por la superposición. Para los píxeles que sean transparentes, los eventos de ratón en lugar deberán ser remitidas a la JPaneldebajo.

¿Es esta una manera de hacer esto?

Sergiy Medvynskyy:

Si es posible. Utilice la función getColorAtdel ejemplo a continuación:

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
public class GUI {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(GUI::startUp); 

    }

    private static void startUp() {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1020,760);
        frame.setResizable(false);
        frame.setLayout(new FlowLayout());
        frame.getContentPane().setBackground(Color.BLUE);
        JTextArea jta = new JTextArea(40,40);
        jta.setEditable(false);
        jta.setBackground(Color.WHITE);
        frame.add(new JScrollPane(jta));
        frame.setVisible(true);
        SwingUtilities.invokeLater(() -> printColors(frame));
    }

    private static void printColors(JFrame frm) {
        System.out.println("Color at (1, 1): " + getColorAt(frm, new Point(1, 1)));
        System.out.println("Color at (300, 100): " + getColorAt(frm, new Point(300, 100)));
    }

    public static Color getColorAt(JFrame frm, Point p) {
        Rectangle rect = frm.getContentPane().getBounds();
        BufferedImage img = new BufferedImage(rect.width, rect.height, BufferedImage.TYPE_INT_ARGB);
        frm.getContentPane().paintAll(img.createGraphics());
        return new Color(img.getRGB(p.x, p.y), true);
    }
}

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=395598&siteId=1
Recomendado
Clasificación