当前位置: 首页 > 编程笔记 >

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

秦博达
2023-03-14
本文向大家介绍java-RGB调色面板的实现(事件监听器之匿名内部类),包括了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、将写的方法全部写到构造方法的末尾,记住一点顺序最重要,顺序如下:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 无论如何,要删除这样添加的事件侦听器: 不更换元素? 问题答案: 除非您在创建时存储了对事件处理程序的引用,否则无法彻底删除事件处理程序。 我通常会将它们添加到该页面上的主要对象中,然后在处理完该对象后可以对其进行迭代和清理。

  • 使用(方法1)单独的侦听器类(可能是内部类)的好处/缺点是什么: 与(方法2)实现接口 与(方法3)相比,为每个需要侦听器的元素设置一个匿名类。 问:这些方法的优点和缺点是什么?是否有性能优势,或者任何推荐一个而不是另一个的设计模式?或者任何其他好处? 我可以看到: 第一种方法是清洁 注意:我看到一个关于嵌套类vs实现ActionListener的问题;但大多数答案似乎给出了患者使用的方法,而不是

  • 应用事件监听器是实现一个或多个 Servlet 事件监听器接口的类。它们是在部署 Web 应用时,实例化并注册到 Web 容器中。它们由开发人员在WAR 包中提供。 Servlet 事件监听器支持在 ServletContext、HttpSession 和ServletRequest 状态改变时进行事件通知。Servlet 上下文监听器是用来管理应用的资源或 JVM 级别持有的状态。HTTP 会话

  • 本文向大家介绍Java匿名类,匿名内部类实例分析,包括了Java匿名类,匿名内部类实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java匿名类,匿名内部类。分享给大家供大家参考,具体如下: 内部类 匿名类  首发日期 :2018-03-25 内部类: 在一个类中定义另一个类,这样定义的类称为内部类。【包含内部类的类可以称为内部类的外部类】 如果想要通过一个类来使用另一个类,可以定

  • 本文向大家介绍vue监听滚动事件实现滚动监听,包括了vue监听滚动事件实现滚动监听的使用技巧和注意事项,需要的朋友参考一下 在vue中实现滚动监听和原生js无太大差异,下面是一个简单的demo,可在控制台查看结果 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!

  • 本文向大家介绍Java添加事件监听器,包括了Java添加事件监听器的使用技巧和注意事项,需要的朋友参考一下 示例 Preferences对象发出的事件有两种:PreferenceChangeEvent和NodeChangeEvent。 PreferenceChangeEvent 每当节点的键值对之一更改时,对象PreferenceChangeEvent就会发出A。可以使用来监听:Propertie