贴吧上看到有人发题:
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));
}
}