package kubach.gui; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JOptionPane; import kubach.packet.PacketCaptchaImage; import kubach.workers.LoadCaptchaWorker; import kubach.workers.RegisterUserWorker; /** * * @author Cr0s */ public class CaptchaPanel extends javax.swing.JDialog { private BufferedImage img; private String key; public String username, password; public MainFrame mf; /** * Creates new form CaptchaPanel */ public CaptchaPanel(MainFrame mf) { this.mf = mf; initComponents(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { panImg = new javax.swing.JPanel(); lblImg = new javax.swing.JLabel(); txtAns = new javax.swing.JTextField(); setAlwaysOnTop(true); setMaximumSize(new java.awt.Dimension(280, 166)); setMinimumSize(new java.awt.Dimension(280, 166)); setResizable(false); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosed(java.awt.event.WindowEvent evt) { formWindowClosed(evt); } public void windowOpened(java.awt.event.WindowEvent evt) { formWindowOpened(evt); } }); panImg.setBorder(javax.swing.BorderFactory.createEtchedBorder()); lblImg.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { lblImgMouseClicked(evt); } }); javax.swing.GroupLayout panImgLayout = new javax.swing.GroupLayout(panImg); panImg.setLayout(panImgLayout); panImgLayout.setHorizontalGroup( panImgLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblImg, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); panImgLayout.setVerticalGroup( panImgLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblImg, javax.swing.GroupLayout.DEFAULT_SIZE, 64, Short.MAX_VALUE) ); txtAns.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { txtAnsKeyPressed(evt); } public void keyTyped(java.awt.event.KeyEvent evt) { txtAnsKeyTyped(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(panImg, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(txtAns, javax.swing.GroupLayout.DEFAULT_SIZE, 260, Short.MAX_VALUE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(panImg, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(txtAns, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// </editor-fold>//GEN-END:initComponents private void txtAnsKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtAnsKeyTyped }//GEN-LAST:event_txtAnsKeyTyped private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened evt.getWindow().setLocationRelativeTo(evt.getOppositeWindow()); this.setTitle("Enter captcha"); this.setSize(new Dimension(280, 146)); }//GEN-LAST:event_formWindowOpened private void txtAnsKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtAnsKeyPressed if (evt.getKeyCode() == KeyEvent.VK_ENTER) { RegisterUserWorker ruw = new RegisterUserWorker(this, this.username, this.password, this.key, txtAns.getText()); ruw.execute(); this.setVisible(false); img.getGraphics().dispose(); } else if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) { this.setVisible(false); img.getGraphics().dispose(); mf.cancelRegistration(); } }//GEN-LAST:event_txtAnsKeyPressed private void formWindowClosed(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosed img.getGraphics().dispose(); this.mf.cancelRegistration(); }//GEN-LAST:event_formWindowClosed private void lblImgMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lblImgMouseClicked // refresh captcha LoadCaptchaWorker lcw = new LoadCaptchaWorker(this, this.username, this.password); lcw.execute(); }//GEN-LAST:event_lblImgMouseClicked // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel lblImg; private javax.swing.JPanel panImg; private javax.swing.JTextField txtAns; // End of variables declaration//GEN-END:variables public void loadCaptchaImage(PacketCaptchaImage p) { if (!p.hasCaptcha) { JOptionPane.showMessageDialog(this, p.key, "Error", JOptionPane.ERROR_MESSAGE, null); this.setVisible(false); mf.cancelRegistration(); return; } try { img = ImageIO.read(new ByteArrayInputStream(p.imageData)); } catch (IOException ex) { Logger.getLogger(CaptchaPanel.class.getName()).log(Level.SEVERE, null, ex); } this.key = p.key; txtAns.setText(""); this.setVisible(true); drawCaptchaImage(); } private void drawCaptchaImage() { if (img != null) { //img = resize(img, 256, 64); lblImg.setIcon(new ImageIcon(img)); lblImg.repaint(); } } public static BufferedImage resize(BufferedImage image, int width, int height) { BufferedImage bi = new BufferedImage(width, height, BufferedImage.TRANSLUCENT); Graphics2D g2d = (Graphics2D) bi.createGraphics(); g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY)); g2d.drawImage(image, 0, 0, width, height, null); g2d.dispose(); return bi; } }