Java滑动条控制相切圆

来源:互联网 发布:单片机多线程 编辑:程序博客网 时间:2024/06/16 23:17

贴吧上看到有人发题:


package King.exercise;import java.awt.BasicStroke;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Point;import javax.swing.Box;import javax.swing.BoxLayout;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JSlider;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;public class TangentCircle extends JPanel {    private final int LEN = 80;    private int r = LEN/2;    private final int WIDTH = 400;    private final int HEIGHT = 240;    private Point leftCenter = new Point((WIDTH-LEN)/2, HEIGHT/2);    private Font userDefinedFont = new Font("微软雅黑", Font.BOLD, 19);    private final String description = "左侧圆的半径:";    private JLabel label = new JLabel();    {        label.setFont(userDefinedFont);        label.setText(description + r);            }        public TangentCircle(){        super();        setPreferredSize(new Dimension(WIDTH, HEIGHT));         JFrame frame = new JFrame("相切圆");         frame.add(this);        frame.add(createSlider(), BorderLayout.SOUTH);        frame.setBounds(300, 300, 0, 0);        frame.pack();        frame.setVisible(true);        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);    }        public static void main(String[] args){        new TangentCircle();    }        private Box createSlider(){        JSlider slider = new JSlider(0, LEN);        slider.setPaintTicks(true);        slider.setMajorTickSpacing(10);        slider.setMinorTickSpacing(1);        slider.setPaintLabels(true);        slider.addChangeListener(new ChangeListener() {            @Override            public void stateChanged(ChangeEvent e) {                r = ((JSlider) e.getSource()).getValue();                label.setText(description + r);                repaint();            }        });        Box box = new Box(BoxLayout.Y_AXIS);        JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));        p.add(label);        box.add(p);        box.add(slider);        return box;    }        @Override    protected void paintComponent(Graphics g){        super.paintComponent(g);        Graphics2D g2d = (Graphics2D) g;        g2d.setStroke(new BasicStroke(4));        g2d.drawOval((int)leftCenter.getX()-r, (int)leftCenter.getY()-r, 2*r,2*r);        g2d.drawOval((int)leftCenter.getX()+r, (int)leftCenter.getY()-LEN+r, 2*(LEN-r), 2*(LEN-r));    }}


0 0