A simple example (and a somewhat useful program), that includes: using the java.awt.Robot class to grab colors from the screen, using the system look and feel, changing the opacity of a window, and other neat tricks. This program wasn't necessarily made to be useful, but feel free to try it out.
Examples:


Attached is the assembled JAR file inside of a ZIP archive.
PixelGrabber.java
Code: Select all
package misc;
import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.*;
import java.util.concurrent.*;
import java.util.logging.*;
import javax.swing.*;
import javax.swing.event.*;
public class PixelGrabber extends JFrame {
private static Robot robot;
private static void initRobot() {
try {
robot = new Robot();
} catch (AWTException ex) {
Logger.getLogger(PixelGrabber.class.getName()).log(Level.SEVERE,
null, ex);
System.exit(1);
}
}
private static void setWindowOpacity(Window window, float f) {
try {
Class<?> awtUtilitiesClass =
Class.forName("com.sun.awt.AWTUtilities");
Method mSetWindowOpacity =
awtUtilitiesClass.getMethod("setWindowOpacity",
Window.class, float.class);
mSetWindowOpacity.invoke(null, window, f);
} catch (Exception ex) {
Logger.getLogger(PixelGrabber.class.getName())
.log(Level.SEVERE, null, ex);
}
}
public PixelGrabber() {
if (robot == null)
initRobot();
initComponents();
Executors.newSingleThreadExecutor().execute(new PixelGrabberThread());
}
private void initComponents() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
menuBar = new JMenuBar();
pixelGrabberMenu = new JMenu("Pixel Grabber");
pixelGrabberToggle = new JCheckBoxMenuItem() {
@Override public String getText() {
return "Grabber (" + (isSelected() ? "On" : "Off") + ")";
}
@Override public KeyStroke getAccelerator() {
return KeyStroke.getKeyStroke("alt G");
}
};
pixelGrabberMenu.add(pixelGrabberToggle);
pixelGrabberMenu.addSeparator();
opacityToggle = new JCheckBoxMenuItem() {
@Override public String getText() {
return "Opacity (" + (isSelected() ? "On" : "Off") + ")";
}
@Override public KeyStroke getAccelerator() {
return KeyStroke.getKeyStroke("alt O");
}
@Override public void fireActionPerformed(ActionEvent e) {
setWindowOpacity(PixelGrabber.this, isSelected() ? 1F : 0.75F);
}
};
pixelGrabberMenu.add(opacityToggle);
menuBar.add(pixelGrabberMenu);
setJMenuBar(menuBar);
redLabel = new JLabel("Red");
greenLabel = new JLabel("Green");
blueLabel = new JLabel("Blue");
previewLabel = new JLabel("Preview");
redSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
greenSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
blueSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
ChangeListener changeListener = new ColorSpinnerChangeListener();
redSpinner.addChangeListener(changeListener);
greenSpinner.addChangeListener(changeListener);
blueSpinner.addChangeListener(changeListener);
previewPanel = new JPanel();
previewPanel.setBackground(Color.BLACK);
setLayout(new GridLayout(4, 2));
add(redLabel);
add(redSpinner);
add(greenLabel);
add(greenSpinner);
add(blueLabel);
add(blueSpinner);
add(previewLabel);
add(previewPanel);
setAlwaysOnTop(true);
setWindowOpacity(this, 0.85F);
pack();
}
private class ColorSpinnerChangeListener implements ChangeListener {
public void stateChanged(ChangeEvent e) {
int r = (Integer) redSpinner.getValue();
int g = (Integer) greenSpinner.getValue();
int b = (Integer) blueSpinner.getValue();
previewPanel.setBackground(new Color(r, g, b));
}
}
private class PixelGrabberThread extends Thread implements Runnable {
public PixelGrabberThread() {
setPriority(Thread.MIN_PRIORITY);
}
@Override public void run() {
while (true) {
if (pixelGrabberToggle.isSelected()) {
PointerInfo pi = MouseInfo.getPointerInfo();
Point p = pi.getLocation();
int x = (int) p.getX();
int y = (int) p.getY();
Color c = robot.getPixelColor(x, y);
redSpinner.setValue(c.getRed());
greenSpinner.setValue(c.getGreen());
blueSpinner.setValue(c.getBlue());
previewPanel.setBackground(c);
}
}
}
}
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new PixelGrabber().setVisible(true);
}
private JMenuBar menuBar;
private JMenu pixelGrabberMenu;
private JCheckBoxMenuItem pixelGrabberToggle;
private JCheckBoxMenuItem opacityToggle;
private JLabel redLabel;
private JSpinner redSpinner;
private JLabel greenLabel;
private JSpinner greenSpinner;
private JLabel blueLabel;
private JSpinner blueSpinner;
private JLabel previewLabel;
private JPanel previewPanel;
}