package com.seaglasslookandfeel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class GenerateMidpoint {
private static JTextField c1;
private static JTextField c2;
private static JTextPane result;
public static void main(String[] args) {
try {
UIManager.setLookAndFeel("com.seaglasslookandfeel.SeaGlassLookAndFeel");
} catch (Exception e) {
e.printStackTrace();
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
c1 = new JTextField();
c1.setPreferredSize(new Dimension(180, 25));
c2 = new JTextField();
c2.setPreferredSize(new Dimension(180, 25));
JButton calc = new JButton();
calc.setPreferredSize(new Dimension(100, 30));
calc.setAction(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
String c1Str = c1.getText();
String c2Str = c2.getText();
if (c1Str.startsWith("0x")) c1Str = c1Str.substring(2);
if (c2Str.startsWith("0x")) c2Str = c2Str.substring(2);
Color color1 = new Color(Integer.parseInt(c1Str, 16));
Color color2 = new Color(Integer.parseInt(c2Str, 16));
result.setText(deriveColor(color1, color2));
}
});
calc.setText("Calculate");
result = new JTextPane();
result.setPreferredSize(new Dimension(180, 100));
result.setEditable(false);
JPanel panel = new JPanel();
panel.setBackground(new Color(248, 248, 248));
panel.add(c1);
panel.add(c2);
panel.add(calc);
panel.add(result);
JFrame frame = new JFrame("Title");
frame.add(panel, BorderLayout.CENTER);
frame.setSize(275, 225);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
}
});
}
private static String deriveColor(Color color1, Color color2) {
int dest = deriveARGB(color1, color2, 0.5f);
return String.format("%06x", dest & 0xFFFFFF);
}
private static int deriveARGB(Color color1, Color color2, float midPoint) {
int r = color1.getRed() + (int) ((color2.getRed() - color1.getRed()) * midPoint + 0.5f);
int g = color1.getGreen() + (int) ((color2.getGreen() - color1.getGreen()) * midPoint + 0.5f);
int b = color1.getBlue() + (int) ((color2.getBlue() - color1.getBlue()) * midPoint + 0.5f);
int a = color1.getAlpha() + (int) ((color2.getAlpha() - color1.getAlpha()) * midPoint + 0.5f);
return ((a & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF);
}
}