自定义border (Oval Border)

原创 2013年12月04日 23:43:04

目录:

java代码:

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;

public class OvalBorder implements Border {
  protected int ovalWidth = 6;
  protected int ovalHeight = 6;
  protected Color lightColor = Color.white;
  protected Color darkColor = Color.gray;

  public OvalBorder() {
    ovalWidth = 6;
    ovalHeight = 6;
  }

  public OvalBorder(int w, int h) {
    ovalWidth = w;
    ovalHeight = h;
  }

  public OvalBorder(int w, int h, Color topColor, Color bottomColor) {
    ovalWidth = w;
    ovalHeight = h;
    lightColor = topColor;
    darkColor = bottomColor;
  }

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

  public boolean isBorderOpaque() {
    return true;
  }

  public void paintBorder(Component c, Graphics g, int x, int y, int width,
      int height) {
    width--;
    height--;

    g.setColor(lightColor);
    g.drawLine(x, y + height - ovalHeight, x, y + ovalHeight);
    g.drawArc(x, y, 2 * ovalWidth, 2 * ovalHeight, 180, -90);
    g.drawLine(x + ovalWidth, y, x + width - ovalWidth, y);
    g.drawArc(x + width - 2 * ovalWidth, y, 2 * ovalWidth, 2 * ovalHeight,
        90, -90);

    g.setColor(darkColor);
    g.drawLine(x + width, y + ovalHeight, x + width, y + height
        - ovalHeight);
    g.drawArc(x + width - 2 * ovalWidth, y + height - 2 * ovalHeight,
        2 * ovalWidth, 2 * ovalHeight, 0, -90);
    g
        .drawLine(x + ovalWidth, y + height, x + width - ovalWidth, y
            + height);
    g.drawArc(x, y + height - 2 * ovalHeight, 2 * ovalWidth,
        2 * ovalHeight, -90, -90);
  }

  public static void main(String[] s) {
    JFrame f = new JFrame("Oval Border");
    f.setSize(100, 100);

    JPanel p = new JPanel(new GridLayout(0, 1, 5, 5));
    JLabel l = new JLabel("Oval Border");

    l.setBorder(new OvalBorder());

    p.add(l);
    p.setBorder(new OvalBorder());

    f.getContentPane().add(p);
    f.show();
  }
}
效果图:


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

相关文章推荐

【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的

初学WPF,知道一些控件,可以通过定义Style的Trigger改变要显示的样式,但是经常遇到一些明明Trigger已经触发了,但是里面Setter设置的样式,却没有效果的问题。其实主要原因,是样式重...

extjsmvc border

  • 2015年04月26日 21:19
  • 55KB
  • 下载

Focus Border Edit

  • 2014年09月23日 22:50
  • 139KB
  • 下载

带图标的搜索框 border-radius详解

简单的样式学习,border-radius

css border实现Bubble提示框的方法

  • 2012年09月19日 11:25
  • 655B
  • 下载

QT使用border-image实现9宫格效果

  • 2017年08月15日 16:26
  • 137KB
  • 下载

【CSS】背景图套路一:用border-image做背景图

未经允许,不得转载。 需求背景:如何用css来制作这样的一张优惠券?尤其是金棕色的齿轮:(设计稿宽高为690px * 210px) 我想到的最直接快速的方法就是用background的URL...
  • LZGS_4
  • LZGS_4
  • 2017年08月24日 20:22
  • 171

解决border-radius失效问题

  • 2016年12月09日 19:21
  • 129KB
  • 下载

CSS Border使用小分享-单像素三角实现

CSS Border使用小分享-单像素三角实现 2010年9月17日 15:47:06 发布:hugo 原理 css盒模型 一个盒子包括:margin+border+padding+...
  • ZLHZHJ
  • ZLHZHJ
  • 2012年05月14日 09:53
  • 549
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义border (Oval Border)
举报原因:
原因补充:

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