swing 圆角按钮_java做的圆角矩形按钮 | 学步园

本文介绍如何在Java Swing中创建一个具有圆角的按钮。通过自定义`MyButton`类并重写`paintComponent`和`paintBorder`方法,实现按钮在不同状态(按下、离开等)下的颜色变化和圆角效果。代码示例展示了如何添加鼠标监听器以及绘制圆角矩形的方法。
摘要由CSDN通过智能技术生成

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Shape;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.geom.RoundRectangle2D;

import javax.swing.Icon;

import javax.swing.JButton;

import javax.swing.JFrame;

public class MyButton extends JButton implements MouseListener {

private Shape shape = null;

private Color click = new Color(0, 0, 113);// 按下时的颜色

private Color quit = new Color(237, 234, 228);// 离开时颜色

public MyButton(String s) {

super(s);

addMouseListener(this);

setContentAreaFilled(false);// 是否显示外围矩形区域 选否

}

public MyButton() {

super();

addMouseListener(this);

}

public MyButton(String text, Icon icon) {

super(text, icon);

addMouseListener(this);

}

public MyButton(Icon icon) {

super(icon);

addMouseListener(this);

}

public void setColor(Color c, Color q) {

click = c;

quit = q;

}

public void mouseClicked(MouseEvent e) {

System.out.println("mouseClicked");

}

public void mousePressed(MouseEvent e) {

System.out.println("mousePressed");

}

public void mouseReleased(MouseEvent e) {

System.out.println("mouseReleased");

}

public void mouseExited(MouseEvent e) {

System.out.println("mouseExited");

}

public void mouseEntered(MouseEvent e) {

System.out.println("mouseEntered");

}

public void paintComponent(Graphics g) {

//如果按下则为CLICK色 否则为 QUIT色

if (getModel().isArmed()) {

g.setColor(click);

} else {

g.setColor(quit);

}

//填充圆角矩形区域 也可以为其它的图形

g

.fillRoundRect(0, 0, getSize().width - 1, getSize().height - 1,

20, 20);

//必须放在最后 否则画不出来

super.paintComponent(g);

}

public void paintBorder(Graphics g) {

//画边界区域

g.setColor(click);

g

.drawRoundRect(0, 0, getSize().width - 1, getSize().height - 1,

20, 20);

}

public boolean contains(int x, int y) {

//判断点(x,y)是否在按钮内

if (shape == null || !(shape.getBounds().equals(getBounds()))) {

shape = new RoundRectangle2D.Float(0, 0, getWidth(), getHeight(),

20, 20);

}

return shape.contains(x, y);

}

public static void main(String[] argv) {

JFrame f = new JFrame();

f.setSize(400, 300);

MyButton btn = new MyButton("button");

f.getContentPane().add(btn, BorderLayout.NORTH);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setVisible(true);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值