javaRGB调色面板的实现事件监听器之匿名内部类

11次阅读

共计 2531 个字符,预计需要花费 7 分钟才能阅读完成。

题目要求:

 ** 要求写一个案例,使用三个 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();}
}

正文完
 0