001package jmri.jmrit.display.controlPanelEditor.shape; 002 003import java.awt.Rectangle; 004import java.awt.event.ActionEvent; 005import java.awt.geom.Ellipse2D; 006 007import javax.swing.BoxLayout; 008import javax.swing.JLabel; 009import javax.swing.JPanel; 010import javax.swing.JTextField; 011 012import jmri.jmrit.display.Editor; 013import jmri.util.swing.JmriMouseEvent; 014import jmri.util.swing.JmriMouseMotionListener; 015 016/** 017 * Frame to create/edit a Control Panel shape Circle object. 018 * @author Pete Cressman Copyright (c) 2012 019 */ 020public class DrawCircle extends DrawFrame { 021 022 private JTextField _diameterText; 023 024 public DrawCircle(String which, String title, PositionableShape ps, Editor ed, boolean create) { 025 super(which, title, ps, ed, create); 026 } 027 028 @Override 029 protected JPanel makeParamsPanel() { 030 JPanel panel = super.makeParamsPanel(); 031 032 JPanel p = new JPanel(); 033 p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS)); 034// p.add(new JLabel(Bundle.getMessage("Circle"))); 035 JPanel pp = new JPanel(); 036 _diameterText = new JTextField(6); 037 _diameterText.setText(Integer.toString(_shape.getWidth())); 038 _diameterText.setHorizontalAlignment(JTextField.RIGHT); 039 pp.add(_diameterText); 040 _diameterText.addMouseMotionListener(JmriMouseMotionListener.adapt( 041 new JmriMouseMotionListener() { 042 @Override 043 public void mouseDragged(JmriMouseEvent e) { 044 updateShape(); 045 } 046 047 @Override 048 public void mouseMoved(JmriMouseEvent e) { 049 _shape.setWidth(getInteger(_diameterText, _shape.getWidth())); 050 updateShape(); 051 } 052 })); 053 _diameterText.addActionListener((ActionEvent e) -> { 054 _shape.setWidth(getInteger(_diameterText, _shape.getWidth())); 055 updateShape(); 056 }); 057 pp.add(new JLabel(Bundle.getMessage("circleRadius"))); 058 p.add(pp); 059 panel.add(p); 060 return panel; 061 } 062 063 @Override 064 protected PositionableShape makeFigure(Rectangle r, Editor ed) { 065 if (r != null) { 066 int dia = Math.max(r.width, r.height); 067 Ellipse2D.Double rr = new Ellipse2D.Double(0, 0, dia, dia); 068 _shape = new PositionableCircle(ed, rr); 069 } 070 return _shape; 071 } 072 073 @Override 074 void setDisplayWidth(int w) { 075 _diameterText.setText(Integer.toString(w)); 076 } 077 078 @Override 079 void setDisplayHeight(int h) { 080 _diameterText.setText(Integer.toString(h)); 081 } 082}