swing自定义弧形边框 CurvedBorder

原创 2013年12月03日 23:57:06
目录:

java代码:

package cn.cun.border;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.border.AbstractBorder;

public class CurvedExample extends JPanel {

  public CurvedExample() {
    super(true);

    JSlider mySlider = new JSlider();
    mySlider.setMajorTickSpacing(20);
    mySlider.setMinorTickSpacing(10);
    mySlider.setPaintTicks(true);
    mySlider.setPaintLabels(true);

    CurvedBorder border = new CurvedBorder(10, Color.RED);
    
    mySlider.setBorder(border);

    add(mySlider);
  }

  public static void main(String s[]) {
    JFrame frame = new JFrame("Custom Curved Border");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 150);
    frame.setContentPane(new CurvedExample());
    frame.setVisible(true);
  }
}
class CurvedBorder extends AbstractBorder {
  private Color wallColor = Color.gray;

  private int sinkLevel = 10;

  public CurvedBorder() {
  }

  public CurvedBorder(int sinkLevel) {
    this.sinkLevel = sinkLevel;
  }

  public CurvedBorder(Color wall) {
    this.wallColor = wall;
  }

  public CurvedBorder(int sinkLevel, Color wall) {
    this.sinkLevel = sinkLevel;
    this.wallColor = wall;
  }

  public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
    g.setColor(getWallColor());

    //  Paint a tall wall around the component
    for (int i = 0; i < sinkLevel; i++) {
      g.drawRoundRect(x + i, y + i, w - i - 1, h - i - 1, sinkLevel - i,
          sinkLevel);
      g.drawRoundRect(x + i, y + i, w - i - 1, h - i - 1, sinkLevel,
          sinkLevel-i);
      g.drawRoundRect(x + i, y, w - i - 1, h - 1, sinkLevel - i,
          sinkLevel);
      g.drawRoundRect(x, y + i, w - 1, h - i - 1, sinkLevel, sinkLevel
          - i);
    }
  }

  public Insets getBorderInsets(Component c) {
    return new Insets(sinkLevel, sinkLevel, sinkLevel, sinkLevel);
  }

  public Insets getBorderInsets(Component c, Insets i) {
    i.left = i.right = i.bottom = i.top = sinkLevel;
    return i;
  }

  public boolean isBorderOpaque() {
    return true;
  }

  public int getSinkLevel() {
    return sinkLevel;
  }

  public Color getWallColor() {
    return wallColor;
  }
}

效果图:

                            ||==========》  《===疑问===》《=========||

相关文章推荐

Canvas学习:绘制圆和圆弧

圆和圆弧是图形中基本图形之一,今天我们来了解在Canvas中怎么绘制圆和圆弧。在Canvas中绘制圆和圆弧其实和绘制线段和矩形一样的简单。在Canvas中,CanvasRenderingContext...

Android四种补间动画介绍及实现

一.Android的animation由四种类型组成:alpha、scale、translate、rotate alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动...

自定义弧形仪表盘

  • 2015年11月28日 11:17
  • 3.91MB
  • 下载

Android 自定义卫星式弧形菜单

import android.content.Context; import android.content.res.TypedArray; import android.util.Attribute...

自定义AlertDialog,弧形GridView

  • 2014年08月13日 10:10
  • 1.37MB
  • 下载

自定义View(使用canvas画圆,线,矩形[钟表,圆形下载,矩形下载,弧形下载])

介绍自定义view 重写onMeasure方法 重写onMeansure方法得到自定义view的宽高。 @Override protected void onMeasure(int w...

Andorid自定义拖动弧形进度条

在android自定义控件中,我们使用进度显示,为了好看,一般都不会用系统自带的。原因大家都懂的。而现在各种自定义进度条显示也是层出不穷,在实际开发中遇到的情况是需要带拖动效果的弧形进度条。...

安卓自定义弧形刻度选择器

在android开发过程中实现通过自定义View实现的弧形刻度选择器,效果如下。 演示效果 一,测量:       首先在onMeasure方法中通过测量获取当前View的宽高,中心点,半...

自定义 弧形滑动条 CricleScrollView

1.最进要做一个需求==>将listView  与 CricleScrollView关联  ,根据ListView 的滑动来控制CricleScrollView滑动块的位置   CricleScrol...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:swing自定义弧形边框 CurvedBorder
举报原因:
原因补充:

(最多只允许输入30个字)