很多时候我们使用的并不是文字按钮,更多是使用图片按钮,图片按钮更美观,也更符合界面。
图片按钮
图片按钮的添加也是使用JLabel,JLable所能使用的是文字,图片,图文。那么首先声明一个JLabel的变量(注意是全局变量),在构造方法里面赋值,使用ImageIcon,同时可以设置鼠标监听事件,当鼠标放在上面就可以改变颜色了,下面是具体代码:
package bk_01;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestFrame extends JFrame implements MouseListener{
JLabel manr;
public TestFrame() {
manr = new JLabel(new ImageIcon("image/1.png"));
manr.setBounds(50, 50, 50, 50);
manr.setEnabled(false);
manr.addMouseListener(this);
this.add(manr);
TestPanel tp = new TestPanel();
tp.setBackground(Color.CYAN);
this.add(tp);
this.setSize(500,500);
this.setDefaultCloseOperation(3);
this.setUndecorated(true);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new TestFrame();
}
class TestPanel extends JPanel {
public TestPanel() {
// TODO Auto-generated constructor stub
}
}
@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().equals(manr)){
manr.setEnabled(true);
}
}
@Override
public void mouseExited(MouseEvent e) {
// 鼠标离开
if(e.getSource().equals(manr)){
manr.setEnabled(false);
}
}
}
其实大致操作是没发生什么变化的,只是多了一些小细节。
进度条
进度条需要使用JProgressBar,这是一个进度条的类,使用他,我们需要创建一个线程并启动,还要用到Thread这个方法,注意要继承接口Runable,下面是具体代码:(包含了上面的代码)
package bk_01;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
public class TestFrame extends JFrame implements MouseListener,Runnable{
JLabel manr;
JProgressBar jpb;
//创建一个线程,并启动
public void start(){
TestFrame frame = new TestFrame();
Thread t = new Thread(frame);
//启动线程
t.start();
dispose();
}
public TestFrame() {
manr = new JLabel(new ImageIcon("image/1.png"));
manr.setBounds(50, 50, 50, 50);
manr.setEnabled(false);
manr.addMouseListener(this);
this.add(manr);
jpb = new JProgressBar();
jpb.setStringPainted(true);
jpb.setBackground(Color.ORANGE);
this.add(BorderLayout.SOUTH,jpb);
TestPanel tp = new TestPanel();
tp.setBackground(Color.CYAN);
this.add(tp);
this.setSize(500,500);
this.setDefaultCloseOperation(3);
this.setUndecorated(true);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public static void main(String[] args) {
// 特别注意这边要加上start()方法,不能忘记
new TestFrame().start();
}
class TestPanel extends JPanel {
public TestPanel() {
// TODO Auto-generated constructor stub
}
}
@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().equals(manr)){
manr.setEnabled(true);
}
}
@Override
public void mouseExited(MouseEvent e) {
// 鼠标离开
if(e.getSource().equals(manr)){
manr.setEnabled(false);
}
}
@Override
public void run() {
// TODO Auto-generated method stub
//启动线程后,线程具体执行的内容。
int [] values = {0,1,1,1,2,2,2,5,5,5,20,20,20,20,20,49,49,49,49,50,51,51,51,52,52,52,80,80,98,98,98,99,99,99,99,99,100};
for(int i = 0;i<values.length;i++){
jpb.setValue(values[i]);
//线程休眠
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
有兴趣的朋友可以试一试将按钮和进度条结合,按下按钮,进度条开始运行。
关于Thread,个人也不是很懂,推荐这篇文章:Thread类的使用
(个人学习总结,如有错误,敬请斧正,学习时间,20,11)