Java中设计GUI窗口界面时我们会设置Button来交互用户的动作,但有时会觉得默认的Button按钮有些丑,希望可以自定义按钮。
例如下面这个例子:(将按钮定义为圆角矩形)
)
而自定义Button形状就需要了解JButton类中的
paintComponent(Graphics g)
函数 //控制button的填充内容
paintBorder(Graphics g)
函数 //控制button的边框
那么具体怎么实现,直接上文档!!!
由于paintComponent函数需要一个Graphics类型的值,所以我们来查询Graphics类
在这个类下提供了很多方法,例如我们需要将Button改为圆角矩形
fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
下面是最开始例子的代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class NewButton extends JButton
private String s;
private int sizeX;
private int sizeY;
public NewButton(String s ,int sizeX,int sizeY)
super(s);
this.sizeX = sizeX;
this.sizeY = sizeY;
setContentAreaFilled(false);
protected void paintComponent(Graphics g)
g.setColor(new Color(31,171,137));
g.fillRoundRect(0,0,getSize().width-1,getSize().height-1,15,15);
super.paintComponent(g);
protected void paintBorder(Graphics g)
g.drawRoundRect(0,0,getSize().width-1,getSize().height-1,15,15);
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SetWindons extends JFrame
private JTextField field_1, field_2;
private JTextArea area;
private NewButton button;
private JLabel label_1, label_2;
public SetWindons()
setLayout(new FlowLayout());
setTitle("面积计算");
setBounds(200,200,156,200);
init();
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
public void init()
field_1 = new JTextField (10);
field_2 = new JTextField(10);
label_1 = new JLabel("长:");
label_2 = new JLabel("宽:");
area = new JTextArea(9,10);
button = new NewButton("确认",50,30);
add(label_1);
add(field_1);
add(label_2);
add(field_2);
add(button);
add(area);
button.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
try
double a = Double.parseDouble(field_1.getText());
double b = Double.parseDouble(field_2.getText());
double sum = a * b;
area.append("面积为" + sum);
catch(Exception exp)
area.append("输入错误!");
除了圆角矩形外,如果想要构造特殊形状,可以使用里面提供的fillPolygon函数

其中X坐标数组和Y坐标数组一一对应,这样通过自定义的一些列点来绘制按钮,从而实现特殊形状的绘制。
通过对button类的了解,编写了一个项目。编写时水平有限因此存在很多问题,若有兴趣请自行下载。
https://gitee.com/Aaranlei/keyboard-monitoring-system

自定义按钮形状在Java中设计GUI窗口界面是我们都会设置Button来处理用户的操作。例如下面这个例子:(将按钮定义为圆角矩形)但是有时候我们会觉得这样的默认按钮不是很美观想要自定义Button的形状,那么自定义Button形状就需要了解JButton类中的paintComponent(Graphics g) 函数 //控制button的填充内容paintBorder(Graphic...
因为JButen是属于小器件类型的,所以一般的setSize不能对其惊醒大小的设置,所以一般我们用
button.setPreferredSize(new Dimension(30,30)); //(30,30) 是你要设置按钮的大小
2、对JButton透明的设置
按钮设置为透明,这样就不会挡着后面的背景
button.setContentAreaFi...
用于摆动的自定义按钮
在这个应用程序中,我使用了一种非常简单的方法来自定义 Java Swing 的按钮。
实际上,我使用了带有图片的 JLabel 并覆盖了 mousePressed()、mouseReleased() 和 mouseMoved() 事件,模拟了按钮行为。
图片可以是任何形状,一旦覆盖事件知道鼠标是悬停在透明像素还是不透明像素上。
例如,我制作了三个不同的图像来代表三个按钮状态:
悬停; 和
单击时,按钮会在控制台中打印文本,确认类似按钮的行为。
当鼠标快速移出时或按下 ALT+TAB 并且鼠标悬停在 JLabel 上时,JLabel 类按钮会出现限制,这两种操作都会使 JLabel 图像不会更新为常规图像(不悬停或单击)图像。
可能的解决方案
到目前为止,有一个验证检查鼠标是否不再悬停在一个不透明的像素上,如果是,则图像从悬停图片更新
JButton b1=new JButton("登录");
p1.setLayout(null);// 设置空布局,即绝对布局
l1.setBounds(50, 230, 50, 34);//绝对位置
p1.add(b1);
//2.对JButton大小的设置
button.setPreferredSize(new Dimension(50,35));
//3.对JButton透明的设置
该按钮继承子JButton,圆角,颜色渐变,有透明度,而且可以自己设置这些参数。
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics
设置按钮大小以及位置,将按钮加入到JFrame窗口
JButton JB=new JButton("按钮");
JB.setBounds(90,150,50,20);//设置按钮大小以及位置
JF.add(JB);//将按钮加入到JFrame窗口
1.设置按钮大小:
JButton jb=new JButton();
jb.setPreferredSize(new Dimension(30,30));//区别于setSize()
2.设置按钮透
public Test() {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
JButton button = new JButton("Button");
button.setAlignmentY(.5f);
panel.add(button);
getContentPane().add(panel);
setSize(200, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
public static void main(String[] args) {
new Test();
### 回答2:
在Java中,如果想要将JButton按钮垂直居中,可以使用BoxLayout管理器。BoxLayout是一个在一个面板中垂直或水平布置组件的布局管理器。可以用以下代码实现垂直居中:
```java
JButton button = new JButton("Button");
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(Box.createVerticalGlue());
panel.add(button);
panel.add(Box.createVerticalGlue());
在上面的代码中,先创建一个JButton对象button,然后创建一个JPanel对象panel。将BoxLayout管理器应用于panel,并设置为垂直方向BoxLayouit.Y_AXIS。
接下来,创建两个垂直组件框来增加垂直空间。Box.createVerticalGlue()方法创建一个可伸缩的、不可见的框架,可以在组件之间增加垂直空间。
将第一个垂直组件框添加到面板的开头,第二个垂直组件框添加到面板的末尾,这会将按钮垂直居中。
最后,将按钮添加到面板中。完成后,将面板添加到你的容器中即可。
使用BoxLayout是将JButton按钮垂直居中的常用方法,如果你需要固定大小的按钮,并将其垂直居中,你可以使用BoxLayout来设置JPanel的最小高度,以适应按钮的大小。
### 回答3:
在Java编程中,JButton按钮的垂直居中显示是一个相对比较简单的问题。以下是一些实现垂直居中的方法:
方法一:使用网格布局和 JPanel
使用网格布局和 JPanel 是实现 JButton 按钮垂直居中的一种简单方法。您可以使用一个 JPanel 来容纳 JButton 和其他组件,并使用网格布局来协调它们,以使 JButton 垂直居中。
示例代码如下:
```java
JPanel panel = new JPanel(new GridLayout(1,1,0,20)); //GridLayout(1, 1, 0, 20)均分,0表示组件之间的间距
JButton button = new JButton("垂直居中");
panel.add(button);
panel.setPreferredSize(new Dimension(100,100));
实现结果如下:

方法二:使用 BoxLayout
BoxLayout 是一个方便的布局管理器,可以让您将组件相对于容器垂直或水平居中。 BoxLayout 有很多选项可以使用,但是对于垂直居中按钮,您可以使用以下选项:
```java
Box box = Box.createVerticalBox();
box.add(Box.createVerticalGlue());
box.add(button);
box.add(Box.createVerticalGlue());
createVerticalBox() 方法创建一个垂直 Box,其中添加了两个 vertical glue 组件,这些组件保证了垂直居中。
示例代码及效果如下:
```java
JPanel panel = new JPanel();
BoxLayout boxLayout = new BoxLayout(panel, BoxLayout.Y_AXIS);
panel.setLayout(boxLayout);
JButton button = new JButton("垂直居中");
panel.add(Box.createVerticalGlue());
panel.add(button);
panel.add(Box.createVerticalGlue());
实现结果如下:

方法三:使用 GridBagLayout
GridBagLayout 是 Java 提供的一种高级布局管理器,它提供了对格子单元的更大控制力。可以通过GridBagConstraints 中的 gridwidth、gridheight、weightx、weighty 和 anchor 等属性来控制组件如何在其格子单元中放置和调整大小。
示例代码及效果如下:
```java
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
JButton button = new JButton("垂直居中");
c.gridx = 0;
c.gridy = 0;
c.weightx = 1;
c.weighty = 1;
c.fill = GridBagConstraints.VERTICAL;
c.anchor = GridBagConstraints.CENTER;
panel.add(button, c);
实现结果如下:

综上,以上是三种实现 JButton 垂直居中的方法,您可以选择一种方法来实现您需要的功能。