首页 > 技术文章 > Java滑动条控制相切圆

kinglearnjava 2014-12-25 13:19 原文

贴吧上看到有人发题:


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));
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

推荐阅读