“同心圆”布局管理器

这篇博客介绍了一个名为`ConcentricCirclesPanel`的Java类,它继承自`JPanel`并实现了同心圆布局。这个布局管理器通过`ConcentricCirclesLayout`类来安排组件,组件分布在多个同心圆上。博客展示了如何设置圆的半径增量、圈数和角度,并在`paintComponent`方法中绘制这些圆。此外,还提供了一个`CCTestFrame`类来演示布局的实际应用,通过改变按钮背景颜色和布局角度来创建动态效果。
摘要由CSDN通过智能技术生成
第一次尝试自己写布局管理器,实用价值不大,核心代码和测试代码如下:

ConcentricCirclesPanel.java

  1. import java.awt.Component;
  2. import java.awt.Container;
  3. import java.awt.Dimension;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.Insets;
  7. import java.awt.LayoutManager;
  8. import java.awt.LayoutManager2;
  9. import java.awt.RenderingHints;
  10. import javax.swing.JPanel;


  11. public class ConcentricCirclesPanel extends JPanel {

  12.     private static final long serialVersionUID = 6265955429442551839L;

  13.     protected void paintComponent(Graphics g) {
  14.         super.paintComponent(g);
  15.         LayoutManager layout = getLayout();
  16.         if (!(layout instanceof ConcentricCirclesLayout)) return;
  17.         ConcentricCirclesLayout ccl = (ConcentricCirclesLayout)layout;
  18.         int fcr = ccl.getFirstCircleRadius();
  19.         int ri = ccl.getRadiusIncrement();
  20.         int cn = ccl.getCircleNum();
  21.         Insets insets = getInsets();
  22.         int cx = insets.left + (getWidth() - insets.left - insets.right) / 2;
  23.         int cy = insets.top + (getHeight() - insets.top - insets.bottom) / 2;
  24.         ((Graphics2D) g).setRenderingHint(
  25.             RenderingHints.KEY_ANTIALIASING,
  26.             RenderingHints.VALUE_ANTIALIAS_ON
  27.         );
  28.         for (int r = fcr, ENDR = fcr + ri * (cn - 1); r <= ENDR; r += ri) {
  29.             g.drawOval(cx - r, cy - r, r * 2, r * 2);
  30.         }
  31.     }


  32.     public static class ConcentricCirclesLayout implements LayoutManager2 {

  33.         private int firstCircleRadius;
  34.         private int radiusIncrement;
  35.         private int circleNum;
  36.         private double angleDegrees;
  37.         private Component[] comps;

  38.         public ConcentricCirclesLayout() {
  39.             this(202030.0);
  40.         }

  41.         public ConcentricCirclesLayout(int firstCircleRadius, int radiusIncrement, int circleNum, double angleDegrees) {
  42.             super();
  43.             
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值