Java制作一个更加真实的按钮

水一期博客


制作一个真实的按钮很简单,比如swing按钮

JButton jb = new JButton(); 

好吧是肯定有点丑的


当我们在点击一个按钮的时候,步骤可以分为以下几步:

  1. 停留在按钮上方
  2. 点击(长按)按钮
  3. 抬起

那么每一步的按钮都是不一样的,是不是可以用这个步骤来制作一个极其真实的按钮呢?
其实根本不需要JButton,几张图片就可以

1.原始的按钮

原始的按钮是鼠标并没有停留在它的上方
假设初始按钮是这样的:
在这里插入图片描述
代码:

JPanel jp = new JPanel();
ImageIcon i = new ImageIcon("Button.png");
JLabel jl = new JLabel(i);
jp.add(jl);
this.add(jp);
this.setVisible(true);
this.setSize(500,400);
this.setResizable(false);

可以看到我们已经有一个"按钮"了
在这里插入图片描述

2.鼠标停留在上方的按钮

假设鼠标停在上方时按钮是这样的:
在这里插入图片描述
那么现在只需判断鼠标是否在按钮上方就可以了
用一种比较简单的方法:鼠标监听事件(MouseListener)
一共有5个方法:点击、按下、释放、进入、离开

//鼠标在组件上按下并释放时调用
void mouseClicked(MouseEvent e)
//鼠标在组件上按下时调用
void mousePressed(MouseEvent e)
//鼠标在组件上释放时调用
void mouseReleased(MouseEvent e)
//鼠标在组件上停留时调用
void mouseEntered(MouseEvent e)
//鼠标离开组件时调用
void mouseExited(MouseEvent e)

很显然,第4个方法正是我们需要的
如果鼠标在label上停留,那么label就切换到另一种图片


首先要对label添加监听

jl.addMouseListener(this);

之后判断一下是不是jl

void mouseEntered(MouseEvent e) {
	if(e.getSource() == jl) {
		
	}
}

如果是,则将jl的图片更改为另一种图片

void mouseEntered(MouseEvent e) {
	if(e.getSource() == jl) {
		jl.setIcon(new ImageIcon("EnterButton.png"));
	}
}

运行下,可以发现我们停留时图片发生了变化
在这里插入图片描述

3.鼠标点击按钮时

和上面的一样
这次我们需要用到第一种方法

void mouseClicked(MouseEvent e) {
	if(e.getSource()==jl) {
		jl.setIcon(new ImageIcon("图片的路径"));
	}
}

4.鼠标离开按钮时

这次我们需要用到第5种方法

void mouseExited(MouseEvent e) {
	if(e.getSource()==jl) {
            jl.setIcon(new ImageIcon("Button.png"));
    }
}

将图片改为初始按钮即可


5.改变鼠标光标

当我们点击一些按钮的时候,鼠标的光标会发生一些变化
那么我们是不是也可以做到呢?


假设停留在按钮上时变为链接选择
在这里插入图片描述
那么只需在停留方法中添加一行:

//更改为链接选择光标
this.setCursor(Cursor.HAND_CURSOR);

在离开方法中添加一行:

//更改为默认光标
this.setCursor(Cursor.DEFAULT_CURSOR);

效果图:
在这里插入图片描述

完整代码:

package com.qq.me;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class MyButton extends JFrame implements MouseListener {

    ImageIcon i;
    JPanel jp;
    JLabel jl;
    public static void main(String args[]) {
        MyButton mb = new MyButton();
    }

    public MyButton() {
        jp = new JPanel();
        i = new ImageIcon("Button.png");
        jl = new JLabel(i);
        jp.add(jl);
        jl.addMouseListener(this);
        this.add(jp);
        this.setVisible(true);
        this.setSize(500,400);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        
    }

    @Override
    public void mousePressed(MouseEvent e) {

    }

    @Override
    public void mouseReleased(MouseEvent e) {

    }

    @Override
    public void mouseEntered(MouseEvent e) {
        if(e.getSource()==jl) {
            jl.setIcon(new ImageIcon("EnterButton.png"));
            this.setCursor(Cursor.HAND_CURSOR);
        }
    }

    @Override
    public void mouseExited(MouseEvent e) {
        if(e.getSource()==jl) {
            jl.setIcon(new ImageIcon("Button.png"));
            this.setCursor(Cursor.DEFAULT_CURSOR);
        }
    }
}

如果觉得按钮周围有空白的话,可以用PS消掉
或者觉得截的按钮有大有小,可以用PS调整


你确定不三连嘛?
三连再走吧!

要用Java制作一个图形登录页面,你可以使用Java Swing库中的组件来创建用户界面。SwingJava一个图形用户界面工具包,它提供了创建窗口、按钮、文本框等图形界面元素的功能。以下是一个简单的图形登录页面的实现步骤: 1. 首先,你需要创建一个继承自`JFrame`的类,这个类将代表整个登录窗口。 2. 接着,你可以使用`JPanel`来组织布局,通常使用`GridLayout`或`BorderLayout`来布局组件。 3. 在面板中添加两个`JTextField`组件,分别用于输入用户名和密码。 4. 为这两个文本输入框添加标签,使用`JLabel`组件,标签内容可以是"用户名"和"密码"。 5. 添加一个`JButton`作为登录按钮,当用户点击该按钮时,程序将执行登录逻辑。 6. 设置窗口的关闭操作,使得点击关闭按钮时程序能够正确退出。 7. 使用`pack()`方法来调整窗口大小以适应其内部组件的首选大小。 8. 最后,设置窗口为可见状态。 下面是一个简单的示例代码: ```java import javax.swing.*; public class LoginWindow extends JFrame { public LoginWindow() { setTitle("图形登录页面"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new GridLayout(3, 2)); // 3行2列的网格布局 add(new JLabel("用户名:")); JTextField usernameField = new JTextField(); add(usernameField); add(new JLabel("密码:")); JPasswordField passwordField = new JPasswordField(); add(passwordField); JButton loginButton = new JButton("登录"); loginButton.addActionListener(e -> { // 登录逻辑代码 String username = usernameField.getText(); char[] password = passwordField.getPassword(); // ...验证用户名和密码 }); add(loginButton); pack(); setLocationRelativeTo(null); // 居中显示 setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new LoginWindow()); } } ``` 在编写实际的登录逻辑代码时,你需要获取用户输入的用户名和密码,并进行相应的验证,比如与数据库中的记录对比。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值