Java按钮样式
有人尝试过将JButton设计成类似NetBeans工具栏按钮的样式吗?这将只显示一张图片,当您将鼠标悬停在上面时,会显示一个1px的圆形correner灰色边框,按钮顶部和底部的背景不同。。。似乎无法设计那样的JButton。。。。有什么建议吗?谢谢Java按钮样式,java,swing,netbeans,Java,Swing,Netbeans,有人尝试过将JButton设计成类似NetBeans工具栏按钮的样式吗?这将只显示一张图片,当您将鼠标悬停在上面时,会显示一个1px的圆形correner灰色边框,按钮顶部和底部的背景不同。。。似乎无法设计那样的JButton。。。。有什么建议吗?谢谢 左:正常 中间:悬停 右:焦点 我甚至不需要那个半个背景,只是不能在悬停时绘制边框…这个实现怎么样?我引用了另一个,并添加了一个名为netbeans.png的小绿色三角形,我在谷歌上找到了这个三角形。但是,您还有一小部分要做;-)按钮获得焦点后
左:正常
中间:悬停
右:焦点
我甚至不需要那个半个背景,只是不能在悬停时绘制边框…这个实现怎么样?我引用了另一个,并添加了一个名为netbeans.png的小绿色三角形,我在谷歌上找到了这个三角形。但是,您还有一小部分要做;-)按钮获得焦点后,在何处使用不同背景绘制边框。我希望你喜欢这个答案
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Area;
import java.awt.geom.RoundRectangle2D;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
public class StylistButton extends JButton implements MouseListener
{
boolean mouseIn = false;
public StylistButton(String s)
{
addMouseListener(this);
setBorderPainted(false);
setContentAreaFilled(false);
}
protected static ImageIcon createImageIcon(String path)
{
URL imgURL = TextSamplerDemo.class.getResource(path);
if (imgURL != null)
{
return new ImageIcon(imgURL);
}
else
{
System.err.println("Couldn't find file: " + path);
return null;
}
}
protected void paintComponent(Graphics g)
{
// set button big enough so we can see the rounding curve.
setSize(60, 40);
ImageIcon netbeans = createImageIcon("netbeans.png");
if (netbeans != null)
{
setIcon(netbeans);
}
setIcon(netbeans);
Color[] gradients;
Graphics2D g2 = (Graphics2D) g;
super.paintComponent(g2);
if(getModel().isRollover())
{
g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
Shape firstClip = g.getClip();
RoundRectangle2D rect = new RoundRectangle2D.Double();
double arc = Math.ceil(getSize().getHeight() / 3);
rect.setRoundRect(0, 0, Math.ceil(getSize().getWidth()), Math.ceil(getSize().getHeight()), arc, arc);
Area secondClip = new Area(getBounds());
secondClip.subtract(new Area(rect));
Area finalClip = new Area(firstClip);
finalClip.subtract(secondClip);
g2.setClip(finalClip);
super.paintComponent(g2);
gradients = new Color[] { new Color(184, 207, 229), new Color(122, 138, 153), new Color(184, 207, 229) };
for(int i = 0; i < gradients.length; i++)
{
arc -= 2;
g2.setColor(gradients[i]);
g2.drawRoundRect(i+1, i+1, (int)Math.ceil(getSize().getWidth()-2)-(i*2), (int)Math.ceil(getSize().getHeight()-2)-(i*2), (int)arc, (int)arc);
}
}
else if (getModel().isSelected())
{
// TODO, leave a permanent focus mark here.
}
}
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.getContentPane().setLayout(new FlowLayout());
StylistButton sButton = new StylistButton("stylistButton");
frame.getContentPane().add(sButton);
frame.setSize(250, 250);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
@Override
public void mouseClicked(MouseEvent e)
{
}
@Override
public void mousePressed(MouseEvent e)
{
}
@Override
public void mouseReleased(MouseEvent e)
{
}
@Override
public void mouseEntered(MouseEvent e)
{
}
@Override
public void mouseExited(MouseEvent e)
{
}
}
导入java.awt.Color;
导入java.awt.FlowLayout;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.RenderingHints;
导入java.awt.Shape;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.awt.geom.Area;
导入java.awt.geom.RoundRectangle2D;
导入java.net.URL;
导入javax.swing.ImageIcon;
导入javax.swing.JButton;
导入javax.swing.JFrame;
公共类StyleStButton扩展JButton实现MouseListener
{
布尔值mouseIn=false;
公共样式按钮(字符串s)
{
addMouseListener(这个);
(二)虚假;
setContentAreaFilled(假);
}
受保护的静态图像图标createImageIcon(字符串路径)
{
URL imgURL=TextSamplerDemo.class.getResource(路径);
如果(imgURL!=null)
{
返回新的图像图标(imgURL);
}
其他的
{
System.err.println(“找不到文件:+path”);
返回null;
}
}
受保护组件(图形g)
{
//将按钮设置得足够大,以便我们可以看到圆角曲线。
设置大小(60,40);
ImageIcon netbeans=createImageIcon(“netbeans.png”);
if(netbeans!=null)
{
setIcon(netbeans);
}
setIcon(netbeans);
颜色梯度;
图形2d g2=(图形2d)g;
超级组件(g2);
if(getModel().isRollover())
{
g2.SetRenderingHists(新的RenderingHists(RenderingHists.KEY_ANTIALIASING,RenderingHists.VALUE_ANTIALIAS_ON));
Shape firstClip=g.getClip();
RoundRectangle2D rect=新的RoundRectangle2D.Double();
双圆弧=Math.ceil(getSize().getHeight()/3);
setRoundRect(0,0,Math.ceil(getSize().getWidth()),Math.ceil(getSize().getHeight()),arc,arc);
Area secondClip=新区域(getBounds());
第二个剪辑。减法(新面积(矩形));
区域最终剪辑=新区域(第一剪辑);
最终剪辑。减法(第二剪辑);
g2.设置剪辑(最终剪辑);
超级组件(g2);
渐变=新颜色[]{新颜色(184207229)、新颜色(122138153)、新颜色(184207229)};
对于(int i=0;i
这个实现怎么样?我引用了另一个,并添加了一个名为netbeans.png的小绿色三角形,我在谷歌上找到了这个三角形。但是,您还有一小部分要做;-)按钮获得焦点后,在何处使用不同背景绘制边框。我希望你喜欢这个答案
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Area;
import java.awt.geom.RoundRectangle2D;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
public class StylistButton extends JButton implements MouseListener
{
boolean mouseIn = false;
public StylistButton(String s)
{
addMouseListener(this);
setBorderPainted(false);
setContentAreaFilled(false);
}
protected static ImageIcon createImageIcon(String path)
{
URL imgURL = TextSamplerDemo.class.getResource(path);
if (imgURL != null)
{
return new ImageIcon(imgURL);
}
else
{
System.err.println("Couldn't find file: " + path);
return null;
}
}
protected void paintComponent(Graphics g)
{
// set button big enough so we can see the rounding curve.
setSize(60, 40);
ImageIcon netbeans = createImageIcon("netbeans.png");
if (netbeans != null)
{
setIcon(netbeans);
}
setIcon(netbeans);
Color[] gradients;
Graphics2D g2 = (Graphics2D) g;
super.paintComponent(g2);
if(getModel().isRollover())
{
g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
Shape firstClip = g.getClip();
RoundRectangle2D rect = new RoundRectangle2D.Double();
double arc = Math.ceil(getSize().getHeight() / 3);
rect.setRoundRect(0, 0, Math.ceil(getSize().getWidth()), Math.ceil(getSize().getHeight()), arc, arc);
Area secondClip = new Area(getBounds());
secondClip.subtract(new Area(rect));
Area finalClip = new Area(firstClip);
finalClip.subtract(secondClip);
g2.setClip(finalClip);
super.paintComponent(g2);
gradients = new Color[] { new Color(184, 207, 229), new Color(122, 138, 153), new Color(184, 207, 229) };
for(int i = 0; i < gradients.length; i++)
{
arc -= 2;
g2.setColor(gradients[i]);
g2.drawRoundRect(i+1, i+1, (int)Math.ceil(getSize().getWidth()-2)-(i*2), (int)Math.ceil(getSize().getHeight()-2)-(i*2), (int)arc, (int)arc);
}
}
else if (getModel().isSelected())
{
// TODO, leave a permanent focus mark here.
}
}
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.getContentPane().setLayout(new FlowLayout());
StylistButton sButton = new StylistButton("stylistButton");
frame.getContentPane().add(sButton);
frame.setSize(250, 250);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
@Override
public void mouseClicked(MouseEvent e)
{
}
@Override
public void mousePressed(MouseEvent e)
{
}
@Override
public void mouseReleased(MouseEvent e)
{
}
@Override
public void mouseEntered(MouseEvent e)
{
}
@Override
public void mouseExited(MouseEvent e)
{
}
}
导入java.awt.Color;
导入java.awt.FlowLayout;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.RenderingHints;
导入java.awt.Shape;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.awt.geom.Area;
导入java.awt.geom.RoundRectangle2D;
导入java.net.URL;
导入javax.swing.ImageIcon;
导入javax.swing.JButton;
导入javax.swing.JFrame;
公共类StyleStButton扩展JButton实现MouseListener
{
布尔值mouseIn=false;
公共样式按钮(字符串s)
{
addMouseListener(这个);
(二)虚假;
setContentAreaFilled(假);
}
受保护的静态图像图标createImageIcon(字符串路径)
{
URL imgURL=TextSamplerDemo.class.getResource(路径);
如果(imgURL!=null)
{
返回新的图像图标(imgURL);
}
其他的
{
System.err.println(“找不到文件:+path”);
返回null;
}
}
受保护组件(图形g)
{
//将按钮设置得足够大,以便我们可以看到圆角曲线。
设置大小(60,40);
ImageIcon netbeans=createImageIcon(“netbeans.png”);
if(netbeans!=null)
{
setIcon(netbeans);
}
setIcon(netbeans);
颜色梯度;
图形2D g2