//Sample16 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class Sample16 extends JFrame implements MouseListener, MouseMotionListener { private static final long serialVersionUID = -5235421690704702101L; private static final int origin_X = 300; private static final int origin_Y = 300; private static final int rect_pitch = 40; private static final int rect_width = 10; private static final String tf_init_value = "100"; private static final int tf_size = 3; private static final int eps = 3; private static final String window_title = "棒グラフをドラッグして値変更"; private static final int window_width = 640; private static final int window_height = 400; JTextField[] tf = new JTextField[2]; static double x1 = 303; static double y1 = 198; static double x2 = 343; static double y2 = 198; static int sw = 0; // 主処理 public static void main(final String ar[]) { final JFrame f = new Sample16(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(Sample16.window_width, Sample16.window_height); f.setVisible(true); } // 部品セット Sample16() { super(Sample16.window_title); final Container c = this.getContentPane(); final JPanel p1 = new JPanel(); for (int i = 0; i < this.tf.length; i++) { this.tf[i] = new JTextField(Sample16.tf_init_value, Sample16.tf_size); p1.add(this.tf[i]); } c.add(p1, BorderLayout.NORTH); this.addMouseListener(this); this.addMouseMotionListener(this); } // 描画 @Override public void paint(final Graphics g) { final double r = 2; final Graphics2D g2 = (Graphics2D) g; g .clearRect(0, 0, Sample16.window_width - 1, Sample16.window_height - 1); for (int i = 0; i < this.tf.length; i++) { this.tf[i].repaint(); final String rs = this.tf[i].getText(); if (rs != null) { try { final double rect_height = Double.parseDouble(rs); g2.setPaint(Color.blue); g2.fill(new Rectangle2D.Double(Sample16.origin_X + i * Sample16.rect_pitch, Sample16.origin_Y - rect_height, Sample16.rect_width, rect_height)); g2.setPaint(Color.red); g2.fill(new Ellipse2D.Double(Sample16.origin_X + 5 + i * Sample16.rect_pitch - r, Sample16.origin_Y - rect_height - r, 2 * r, 2 * r)); if (i == 0) { Sample16.y1 = Sample16.origin_Y - rect_height - r; } if (i == 1) { Sample16.y2 = Sample16.origin_Y - rect_height - r; } } catch (final NumberFormatException e) { } } } } // マウスイベント public void mousePressed(final MouseEvent me) { Sample16.sw = 0; final double x = me.getX(); final double y = me.getY(); if ((Math.abs(Sample16.x1 - x) < Sample16.eps) && (Math.abs(Sample16.y1 - y) < Sample16.eps)) { Sample16.sw = 1; } if ((Math.abs(Sample16.x2 - x) < Sample16.eps) && (Math.abs(Sample16.y2 - y) < Sample16.eps)) { Sample16.sw = 2; } } // マウスドラッグイベント public void mouseDragged(final MouseEvent me) { if (Sample16.sw > 0) { final int y = me.getY(); this.tf[Sample16.sw - 1].setText("" + (Sample16.origin_Y - 2 - y)); this.repaint(); } } public void mouseReleased(final MouseEvent me) { } public void mouseMoved(final MouseEvent me) { } public void mouseEntered(final MouseEvent me) { } public void mouseExited(final MouseEvent me) { } public void mouseClicked(final MouseEvent me) { } }