java-RGB调色面板的实现(事件监听器之匿名内部类)

题目要求:
 **要求写一个案例,使用三个JSlider分别选取R、G、B三原色的值,用户可以通过活动JSlider的滑块来动态的合成一种颜色,合成的颜色显示在界面上。**

代码思路解析:
1、所需要的组件

	(1)JFrame窗口
	(2)JLabel的RGB标签文字组件
	(3)JTextField颜色变动的数值
	(4)JSlider颜色交换的滑块组件
	(5)JTextArea颜色显示区域

2、构造方法中将JFrame、JSlider、JTextField、JTextArea组件全部实例化
3、另写一个方法将创建的所有的组件添加到相应的面板中去,布局采用的是swing包中JPanel组件面板BorderLayout(东西南北中)的模式,用其中的东与中面板,其他的不写
4、最重要的一步,我这里采用的是匿名内部类的方法独立写了一个方法添加的时间监听器,具体写法看代码
5、写一个方法将最外层的面板的尺寸,关闭窗口,还有最重要的关闭窗口setVisible(true),具体解释如下:

setVisible(true);方法的意思是说数据模型已经构造好了,允许JVM可以根据数据模型执行paint方法开始画图并显示到屏幕上了,并不是显示图形,而是可以运行开始画图了。这个方法和java多线程的start方法有点异曲同工之妙,start方式是允许run方法运行了,start方法和setVisible方法很相似。
6、将写的方法全部写到构造方法的末尾,记住一点顺序最重要,顺序如下:
将组件添加到面板才能调用时间监听器方法,否则后果自己看。
8、最后一步,在主方法中将所有方法都放在构造方法进行实例化创建对象即可完成
具体代码如下:

package create;

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class ZuoYe {
	private JFrame jf;
	private JLabel label1, label2, label3;
	private JSlider slider1, slider2, slider3;
	private JTextField field1, field2, field3;
	private JTextArea jta;

	public ZuoYe() {
		jf = new JFrame();
		label1 = new JLabel("R:");
		label2 = new JLabel("\n G:");
		label3 = new JLabel("B:");

		slider1 = new JSlider(0, 255, 127);
		slider2 = new JSlider(0, 255, 127);
		slider3 = new JSlider(0, 255, 127);

		field1 = new JTextField("127");
		field2 = new JTextField("127");
		field3 = new JTextField("127");

		field1.setEditable(false);
		field2.setEditable(false);
		field3.setEditable(false);

		jta = new JTextArea(5, 10);
		jta.setEditable(false);
		jta.setBackground(new Color(127, 127, 127));
		init();
		showMe();
		addEventHandler();
	}

	public void init() {
		JPanel jp1 = new JPanel();
		jp1.add(label1);
		jp1.add(slider1);
		jp1.add(field1);

		jp1.add(label2);
		jp1.add(slider2);
		jp1.add(field2);

		jp1.add(label3);
		jp1.add(slider3);
		jp1.add(field3);

		JPanel jp2 = new JPanel();
		jp2.add(jta);

		jf.add(jp1, BorderLayout.CENTER);
		jf.add(jp2, BorderLayout.EAST);
		jf.setVisible(true);
	}

	public void showMe() {
		jf.setSize(400, 200);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
	}

	public void addEventHandler() {
		ChangeListener lis = new ChangeListener() {

			public void stateChanged(ChangeEvent arg0) {
				int r = slider1.getValue();
				int g = slider2.getValue();
				int b = slider3.getValue();
				field1.setText(r + "");
				field2.setText(g + "");
				field3.setText(b + "");
				Color c = new Color(r, g, b);
				jta.setBackground(c);
			}
		};
		slider1.addChangeListener(lis);
		slider2.addChangeListener(lis);
		slider3.addChangeListener(lis);
	}

	public static void main(String[] args) {
		//构造方法这样写调用对象,不用构造对象去调用方法,构造方法中末尾已经写过其他的方法
		ZuoYe ts = new ZuoYe();
//		ts.showMe();
//		ts.init();
	}
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ctrl精

面试很多问题,积攒不容易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值