package pothos_tegaki;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 動作チェック用
*
* @author miuramo
*
*/
public class PothosTestApplication extends JPanel implements MouseListener, MouseMotionListener, TegakiCallBack {
private static final long serialVersionUID = -6151727190512894026L;
static PothosLibRecognizer recognizer;
static {
recognizer = new PothosLibRecognizer();
}
ArrayList<ArrayList<Point2D>> pointsVec;
ArrayList<Point2D> currentLine;
Point preP = null;
public PothosTestApplication(){
setPreferredSize(new Dimension(500,500));
pointsVec = new ArrayList<ArrayList<Point2D>>();
addMouseListener(this);
addMouseMotionListener(this);
}
public void paintComponent(Graphics g){
g.setColor(Color.white);
Dimension d = getSize();
g.fillRect(0,0,d.getSize().width,d.getSize().height);
g.setColor(Color.blue);
Point2D pre = null;
for(ArrayList<Point2D> pw : pointsVec){
for(int i=1;i<pw.size();i++){
pre = pw.get(i-1);
Point2D now = pw.get(i);
g.drawLine((int)pre.getX(),(int)pre.getY(),(int)now.getX(),(int)now.getY());
}
}
}
public void recog(){
if (pointsVec.size()>2) {
TegakiRecogTask trt = new TegakiRecogTask(this);
trt.setPointArray(pointsVec);
System.out.println(recognizer.recognize(trt));
}
repaint();
}
public static void main(String[] args) {
JFrame jf = new JFrame("TegakiPanel(枠なし文字認識エンジンのテスト)");
final PothosTestApplication tegakiP = new PothosTestApplication();
JButton recogB = new JButton("Recog!");
JButton clearB = new JButton("Clear");
// Box box = new Box(BoxLayout.Y_AXIS);
// Enumeration<JCheckBox> enu = cb2int.keys();
// while(enu.hasMoreElements()){
// JCheckBox jcb = enu.nextElement();
// box.add(jcb);
// jcb.addItemListener(tegakiP);
// }
jf.getContentPane().add(tegakiP);
jf.getContentPane().add(recogB, BorderLayout.SOUTH);
jf.getContentPane().add(clearB, BorderLayout.NORTH);
// jf.getContentPane().add(box, BorderLayout.WEST);
jf.pack();
jf.setVisible(true);
jf.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
System.exit(0);
}
});
jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
recogB.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
tegakiP.recog();
}
});
clearB.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
tegakiP.pointsVec = new ArrayList<ArrayList<Point2D>>();
tegakiP.repaint();
}
});
}
public void mouseClicked(MouseEvent arg0) {
}
public void mousePressed(MouseEvent arg0) {
currentLine = new ArrayList<Point2D>();
pointsVec.add(currentLine);
Point p = arg0.getPoint();
currentLine.add(new Point2D.Float(p.x, p.y));
repaint();
}
public void mouseReleased(MouseEvent arg0) {
Point p = arg0.getPoint();
currentLine.add(new Point2D.Float(p.x, p.y));
currentLine = null;
}
public void mouseEntered(MouseEvent arg0) {
}
public void mouseExited(MouseEvent arg0) {
}
public void mouseDragged(MouseEvent arg0) {
Point p = arg0.getPoint();
currentLine.add(new Point2D.Float(p.x, p.y));
repaint();
}
public void mouseMoved(MouseEvent arg0) {
}
// public void itemStateChanged(ItemEvent arg0) {
// int tmask = 0;
// Enumeration<JCheckBox> enu = cb2int.keys();
// while(enu.hasMoreElements()){
// JCheckBox jcb = enu.nextElement();
// if (jcb.isSelected()){
// tmask |= cb2int.get(jcb);
// }
// }
// TegakiPanel.mask = tmask;
// System.out.println("mask : "+tmask);
// /*
// Object src = arg0.getSource();
// if (src instanceof JCheckBox){
// JCheckBox cb = (JCheckBox) src;
// int tm = cb2int.get(cb);
// if (cb.isSelected()){
// TegakiPanel.recognizer.mask &= tm;
// } else {
// TegakiPanel.recognizer.mask ^= tm;
// }
// }*/
// }
@Override
public void callback(TegakiRecogTask s) {
System.out.println(s.result);
}
}