java中如何实现圆角按钮 ? java中如何实现圆角按钮 ? 如QQ登录时的查杀木马,和设置按钮,和圆角是怎么样实现的?用哪个属性??谢谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 推荐楼主看Swing Hacks这本书, 里面这种自定义组件非常的多, 写得很好. 到网上找了个不知道lz是不是这个意思import java.awt.BorderLayout;import java.awt.Color;import java.awt.Graphics;import java.awt.Shape;import java.awt.geom.RoundRectangle2D;import javax.swing.JButton;import javax.swing.JFrame;public class MyButton extends JButton { private Shape shape = null; private Color quit = new Color(0, 0, 228);// 离开时颜色 public MyButton(String s) { super(s); //addMouseListener(this); setContentAreaFilled(false);// 是否显示外围矩形区域 选否 } public void paintComponent(Graphics g) { g.setColor(quit); //填充圆角矩形区域 也可以为其它的图形 g.fillRoundRect(0, 0, getSize().width - 1, getSize().height - 1, 20, 20); //必须放在最后 否则画不出来 super.paintComponent(g); } public void paintBorder(Graphics g) { //画边界区域 g.drawRoundRect(0, 0, getSize().width - 1, getSize().height - 1, 20, 20); } public static void main(String[] argv) { JFrame f = new JFrame(); f.setSize(400, 300); MyButton btn = new MyButton("button"); f.setLayout(null); btn.setBounds(100, 100, 80, 30); f.getContentPane().add(btn, BorderLayout.NORTH); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); }} 想重点指出的是: setContentAreaFilled(false);// 是否显示外围矩形区域 选否 这一句代码非常重要, 如果不设置或者设置为true(默认就是true), 那么, 系统会调用JButton来绘制按钮的外观, 即你在paintComponent(..)这个方法中的绘制不会起作用. 改环境L&F调整成圆的不就行了 楼上的调整 l&f 可以达到目标?怎么样具体操作? 修改L&F和重写JButton都是一样的写法. 不过上面的代码中还需要重写contains方法, 不然虽然按钮看上去是圆的, 鼠标点击的时候仍然可以点击到圆以外的地方, 因为组件默认是矩形的. 找一现成的 L&F 即感官。 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【haoyanbinok】截止到2008-07-29 10:19:30的历史汇总数据(不包括此帖):发帖的总数量:24 发帖的总分数:460 每贴平均分数:19 回帖的总数量:6 得分贴总数量:1 回帖的得分率:16% 结贴的总数量:13 结贴的总分数:160 无满意结贴数:3 无满意结贴分:60 未结的帖子数:11 未结的总分数:300 结贴的百分比:54.17 % 结分的百分比:34.78 % 无满意结贴率:23.08 % 无满意结分率:37.50 % 楼主加油 我建议采用L&F设置,网上很多开源扩展包,例如substance.jar包。可以再www.open-open.com上面查找不过,如果需要自己定义按钮的外观,除了楼上的高手解决的方法外,如果想避免鼠标点击按钮的时候出现圆形以外的矩形方框,可以采用下面的方法来取消:jb1.setUI(new BasicButtonUI());jb1.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));//PS:jb1为JButton对象以上仅为参考,希望大家互相探讨! 网上import java.awt.BorderLayout;import java.awt.Color;import java.awt.Graphics;import java.awt.Shape;import java.awt.geom.RoundRectangle2D;import javax.swing.JButton;import javax.swing.JFrame;public class MyButton extends JButton {private Shape shape = null;private Color quit = new Color(0, 0, 228);// 离开时颜色public MyButton(String s) { super(s); //addMouseListener(this); setContentAreaFilled(false);// 是否显示外围矩形区域 选否}public void paintComponent(Graphics g) { g.setColor(quit); //填充圆角矩形区域 也可以为其它的图形 g.fillRoundRect(0, 0, getSize().width - 1, getSize().height - 1, 20, 20); //必须放在最后 否则画不出来 super.paintComponent(g);}public void paintBorder(Graphics g) { //画边界区域 g.drawRoundRect(0, 0, getSize().width - 1, getSize().height - 1, 20, 20);}public static void main(String[] argv) { JFrame f = new JFrame(); f.setSize(400, 300); MyButton btn = new MyButton("button"); f.setLayout(null); btn.setBounds(100, 100, 80, 30); f.getContentPane().add(btn, BorderLayout.NORTH); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true);}} JLabel、JLabel、JLabel、JLabel、JLabel…………加上图片,用鼠标事件响应…………为什么没人用呢?很简单又很实用的解决方法…… L&F不会用啊,布局的layout也不会在java API上看见的很多,如:getUI() : 返回呈现此组件的 L&F 对象啥意思?不会~~~ 在网上找一个substance.jar这个java的三方包.如果不会用就发消息给我.只要加上这个包.按钮就变圆了 呵呵 能让Frame透明吗 在frame上的组建却不透明 FRAME可以透明,在它上面的组件同样可以透明~~ 如何设置JTree叶子节点的高度和叶子节点的间距 鼠标响应,请高手帮忙 用数据结构实现ArrayList 安装jdk时的问题! 一个报表设计器GUI界面初步探索(欢迎大家来讨论) 我想知道 输入的时间为什么到了数据库就变了? 如何在tree中的每一个节点前动态的加一个复选框? Error: java的jar错误. 请教一个对象序列化问题 想了很长时间 想不通,来帮帮忙啊,关于PushbackReader 怎么学习JAVA?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Shape;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MyButton extends JButton {
private Shape shape = null;
private Color quit = new Color(0, 0, 228);// 离开时颜色
public MyButton(String s) {
super(s);
//addMouseListener(this);
setContentAreaFilled(false);// 是否显示外围矩形区域 选否
}
public void paintComponent(Graphics g) {
g.setColor(quit);
//填充圆角矩形区域 也可以为其它的图形
g.fillRoundRect(0, 0, getSize().width - 1, getSize().height - 1,
20, 20);
//必须放在最后 否则画不出来
super.paintComponent(g);
}
public void paintBorder(Graphics g) {
//画边界区域
g.drawRoundRect(0, 0, getSize().width - 1, getSize().height - 1,
20, 20);
}
public static void main(String[] argv) {
JFrame f = new JFrame();
f.setSize(400, 300);
MyButton btn = new MyButton("button");
f.setLayout(null);
btn.setBounds(100, 100, 80, 30);
f.getContentPane().add(btn, BorderLayout.NORTH);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
setContentAreaFilled(false);// 是否显示外围矩形区域 选否
这一句代码非常重要, 如果不设置或者设置为true(默认就是true), 那么, 系统会调用JButton来绘制按钮的外观, 即你在paintComponent(..)这个方法中的绘制不会起作用.
楼主【haoyanbinok】截止到2008-07-29 10:19:30的历史汇总数据(不包括此帖):
发帖的总数量:24 发帖的总分数:460 每贴平均分数:19
回帖的总数量:6 得分贴总数量:1 回帖的得分率:16%
结贴的总数量:13 结贴的总分数:160
无满意结贴数:3 无满意结贴分:60
未结的帖子数:11 未结的总分数:300
结贴的百分比:54.17 % 结分的百分比:34.78 %
无满意结贴率:23.08 % 无满意结分率:37.50 %
楼主加油
不过,如果需要自己定义按钮的外观,除了楼上的高手解决的方法外,如果想避免鼠标点击按钮的时候出现
圆形以外的矩形方框,可以采用下面的方法来取消:
jb1.setUI(new BasicButtonUI());
jb1.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
//PS:jb1为JButton对象以上仅为参考,希望大家互相探讨!
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Shape;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MyButton extends JButton {
private Shape shape = null;
private Color quit = new Color(0, 0, 228);// 离开时颜色
public MyButton(String s) {
super(s);
//addMouseListener(this);
setContentAreaFilled(false);// 是否显示外围矩形区域 选否
}
public void paintComponent(Graphics g) {
g.setColor(quit);
//填充圆角矩形区域 也可以为其它的图形
g.fillRoundRect(0, 0, getSize().width - 1, getSize().height - 1,
20, 20);
//必须放在最后 否则画不出来
super.paintComponent(g);
}
public void paintBorder(Graphics g) {
//画边界区域
g.drawRoundRect(0, 0, getSize().width - 1, getSize().height - 1,
20, 20);
}
public static void main(String[] argv) {
JFrame f = new JFrame();
f.setSize(400, 300);
MyButton btn = new MyButton("button");
f.setLayout(null);
btn.setBounds(100, 100, 80, 30);
f.getContentPane().add(btn, BorderLayout.NORTH);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}