当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2021-05-13
题目要求: 要求写一个案例,使用三个JSlider分别选取R、G、B三原色的值,用户可以通过活动JSlider的滑块来动态的合成一种颜色,合成的颜色显示在界面上。 代码思路解析: 1、所需要

题目要求:

要求写一个案例,使用三个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、将写的方法全部写到构造方法的末尾,记住一点顺序最重要,顺序如下:

7、将组件添加到面板才能调用时间监听器方法,否则后果自己看。

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();
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

网友评论