0

以下は私のコードです。スライダーを動かしてズームを実装しようとしています。しかし、効果は現れません。これについて私を助けてください。迷っています。私はJavaが初めてで、これにNetbeansを使用しています。

さらに、拡大した画像をクリックして、実際の画像に対応する点を表示する必要があります。どうすればこれを可能にできますか?

public class TrialZoom extends javax.swing.JFrame {

/**
 * Creates new form TrialZoom
 */
private float scaleX, scaleY;
Point p = new Point();
Point q = new Point();
Vector<Point> v = new Vector();
Vector<Float> v_scale = new Vector();

public TrialZoom() {
    initComponents();
}


@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jPanel1 = new javax.swing.JPanel();
    jButton1 = new javax.swing.JButton();
    jPanel2 = new javax.swing.JPanel();
    jPanel3 = new javax.swing.JPanel();
    jSlider2 = new javax.swing.JSlider();
    jPanel4 = new javax.swing.JPanel();
    jLabel1 = new javax.swing.JLabel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jPanel1.setLayout(new java.awt.GridLayout(1, 0));

    jButton1.setText("Done");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });
    jPanel1.add(jButton1);

    getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_END);

    jPanel2.setLayout(new java.awt.BorderLayout());

    jPanel3.setLayout(new java.awt.GridLayout(1, 0));

    jSlider2.addChangeListener(new javax.swing.event.ChangeListener() {
        public void stateChanged(javax.swing.event.ChangeEvent evt) {
            jSlider2StateChanged(evt);
        }
    });
    jPanel3.add(jSlider2);

    jPanel2.add(jPanel3, java.awt.BorderLayout.PAGE_END);

    jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
    jLabel1.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            jLabel1MouseClicked(evt);
        }
    });

    javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
    jPanel4.setLayout(jPanel4Layout);
    jPanel4Layout.setHorizontalGroup(
        jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 400, Short.MAX_VALUE)
        .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addGap(0, 200, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addGap(0, 200, Short.MAX_VALUE)))
    );
    jPanel4Layout.setVerticalGroup(
        jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 251, Short.MAX_VALUE)
        .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addGap(0, 125, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addGap(0, 126, Short.MAX_VALUE)))
    );

    jPanel2.add(jPanel4, java.awt.BorderLayout.CENTER);

    getContentPane().add(jPanel2, java.awt.BorderLayout.CENTER);

    pack();
}// </editor-fold>                        

private void jSlider2StateChanged(javax.swing.event.ChangeEvent evt) {                                      
    // TODO add your handling code here:
    int val = ((JSlider) evt.getSource()).getValue();
    setScale(val * .01f, val * .01f);
}                                     

private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {                                     
 setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.CROSSHAIR_CURSOR));
    p = evt.getPoint();
    q = SwingUtilities.convertPoint(evt.getComponent(), p, this);

    v.add(p);
    v_scale.add(scaleX);
    v_scale.add(scaleY);



    double c = q.getX();
    double d = q.getY();

    String x1 = Double.toString(p.getX());
    String x2 = Double.toString(p.getY());


    Graphics g = this.getGraphics();
    paint(g, (int) c, (int) d);        // TODO add your handling code here:
}                                    

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
System.out.println(p.getX() + "  " + p.getY() + "  " + q.getX() + "  " + q.getY());
    float sx=v_scale.remove(0);
    float sy=v_scale.remove(0);

    System.out.println(sx+" "+sy);

    dispose();
    // TODO add your handling code here:
}                                        

 public Vector<Point> first(ImageIcon icon) {

     jLabel1.setIcon(icon);
 return return_vector();
 }


public void paint(Graphics g, int a, int b) {
    g.setColor(Color.RED);
    g.drawRect(a - 1, b - 1, 3, 3);
    g.fillRect(a, b, 2, 2);
}


@Override
public Dimension getPreferredSize() {

    int prefWidth;
    prefWidth = (int) (jLabel1 == null ? 0 : jPanel4.getWidth() * scaleX);
    int prefHeight;
    prefHeight = (int) (jLabel1 == null ? 0 : jPanel4.getHeight() * scaleY);

    return new Dimension(prefWidth, prefHeight);
}

    public void paintComponent(Graphics g) {
    if (jLabel1 == null) {
        return;
    }

    int w = (int) (jLabel1.getWidth() * scaleX);
    int h = (int) (jLabel1.getHeight() * scaleY);

    int x = (getWidth() - w) / 2;
    int y = (getHeight() - h) / 2;
    ImageIcon img_icon=(ImageIcon) jLabel1.getIcon();
    g.drawImage(img_icon.getImage(), x, y, w, h, null);
}

public void setScale(float x, float y) {
    this.scaleX = x;
    this.scaleY = y;
    jLabel1.revalidate();
    jLabel1.repaint();
}

 public Vector<Point> return_vector() {
    return this.v;
}

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {

    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(TrialZoom.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(TrialZoom.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(TrialZoom.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(TrialZoom.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new TrialZoom().setVisible(true);
        }
    });
}
// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JSlider jSlider2;
// End of variables declaration                   
}
4

1 に答える 1