贴吧上看到有人发题:
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)); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。