package uk.kludje.experimental.test.proxy;
import uk.kludje.experimental.proxy.Interface;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.function.Consumer;
import static uk.kludje.experimental.proxy.ProxyBinding.binder;
import static uk.kludje.experimental.proxy.ProxyBinding.proxy;
public class Click2 {
private static final Interface<Consumer<MouseEvent>> CONSUMER = new Interface<Consumer<MouseEvent>>() {
};
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle(Click2.class.getSimpleName());
frame.setLayout(new FlowLayout());
frame.add(click(new JButton("Load"), Click2::load));
frame.add(click(new JButton("Save"), Click2::save));
frame.add(click(new JButton("Close"), Click2::close));
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private static <C extends JComponent> C click(C comp, Consumer<MouseEvent> listener) {
MouseListener ml = binder(MouseListener.class, CONSUMER)
.bind(proxy(MouseListener.class)::mouseClicked, listener::accept);
comp.addMouseListener(ml);
return comp;
}
private static void load(MouseEvent event) {
System.out.println("load");
}
private static void save(MouseEvent event) {
System.out.println("save");
}
private static void close(MouseEvent event) {
System.out.println("close");
}
}