Swing组件通常触发的事件及对应监听器
- 格式:xls
- 大小:20.50 KB
- 文档页数:4
javagui知识点总结一、Swing GUI组件Swing是Java中用于创建GUI的一套组件库,它提供了丰富的GUI组件,包括按钮、文本框、标签、列表框、表格等等。
这些组件可以通过代码进行创建、配置和操作,从而构建出丰富多彩的用户界面。
Swing组件还支持丰富的外观和行为定制,可以通过设置各种属性和监听器来满足不同的需求。
1.1 按钮(Button)按钮是Swing中最基本的GUI组件之一,它通常用于触发某个操作或事件。
在Swing中,按钮可以通过JButton类来创建,可以设置按钮的文本、图标、颜色、大小、位置等属性,并为按钮添加各种监听器来处理用户的点击事件。
1.2 文本框(TextField)文本框用于接受用户的输入,可以通过JTextField类来创建,可以设置文本框的默认文本、颜色、大小、位置等属性,并通过添加文本变化监听器来实时监测用户的输入。
1.3 标签(Label)标签用于显示静态文本信息,可以通过JLabel类来创建,可以设置标签的文本、字体、颜色、大小、位置等属性,还可以通过添加鼠标事件监听器来实现交互式标签。
1.4 列表框(ListBox)列表框用于显示一组选项供用户选择,可以通过JList类来创建,可以设置列表框的选项、颜色、大小、位置等属性,并为列表框添加选择事件监听器来处理用户的选项选择。
1.5 表格(Table)表格用于显示和编辑二维数据,可以通过JTable类来创建,可以设置表格的数据模型、列模型、传输器、颜色、大小、位置等属性,并为表格添加各种监听器来处理表格的编辑和选择事件。
二、事件处理在Java GUI编程中,事件处理是至关重要的一部分,它用于实现用户界面和用户交互的逻辑。
Swing组件提供了丰富的事件类型,包括鼠标事件、键盘事件、焦点事件、窗口事件等等,开发人员可以通过添加事件监听器来处理这些事件,从而实现用户交互的各种效果。
2.1 事件监听器(EventListener)事件监听器是一种特殊的接口,用于监听和处理特定类型的事件。
Swing中的事件处理监听器:ActionListener方法:actionPerformed事件:ActionEvent● String getActionCommand()actioncommand是控件内部的一个字符串,用于标识控件的状态。
此函数可以取得控件的状态,从而决定到底该做什么。
● int getModifiers()取得“产生此事件时,用户同时按下的组合键”● long getWhen()取得“产生此事件时的时间戳”事件产生原因:点击按钮,在列表框中选择内容,在文本框中点回车,计时器到期监听器:AdjustmentListener方法:adjustmentValueChanged事件:AdjustmentEvent● Adjustable getAdjustable()adjustable是一个接口,各种滚动条都实现了这个接口。
● int getAdjustmentType()取得滚动类型,共有UNIT_INCREMENT,UNIT_DECREMENT,BLOCK_INCREMENT,BLOCK_DECREMENT,TRACK共5种类型● int getValue()取得滚动滑块的当前值事件产生原因:滚动条的滚动监听器:ItemListener方法:itemStateChanged事件:ItemEvent● Objedt getItem()取得被选中的元素。
注意,返回值是Object,还应该进行强制类型转换。
● ItemSelectable getItemSelectable()ItemSelectable是一个接口,代表那些包含了n个可供选择的子元素的对象。
此方法返回产生此事件的对象。
此方法的作用主要在于,如果一个列表框是允许多选的,那么上面的方法就不好用了,应该用此方法得到列表对象,再取得被选中的多个元素。
● int getStateChange()取得选择的状态,是SELECTED还是DESELECTED事件产生原因:各种按钮的点击,列表框的选择监听器:FocusListener方法:focusGained、focusLost事件:FocusEvent● Component getOppositeComponent()得到“参与焦点变换的”另一个对象。
J a v a S w i n g中处理各组件事件的一般步骤集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]Java Swing中处理各组件事件的一般步骤是:1.新建一个组件(如JButton)。
2.将该组件添加到相应的面板(如JPanel)。
3.注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。
4.定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。
以上步骤我们可以用多种方法实现。
但人们通常用二种方法。
第一种方法是只利用一个监听器以及多个if语句来决定是哪个组件产生的事件;第二种方法是使用多个内部类来响应不同组件产生的各种事件,其具体实现又分两种方式,一种是匿名内部类,一种是一般内部类。
为了说明如何使用上述三种方法实现事件的处理方法,我们建立一个简单的应用程序。
该程序界面有两个按钮,当用户点击相应的按钮,就会弹出一个对话框显示相应的内容。
通过这个简单程序,你可以实现自己更多、更复杂的用户界面程序。
首先,我们利用单个监听器来实现该程序。
我们定义一个名为Simple1的类来包括所有代码。
所有的用户行为(如点击按钮)由一个监听器SimpleListenner中的actionPerformed方法来处理。
以下是代码:import .*;import .*;public class Simple1{private static JFrame frame;dd(myPanel);();(true);}}让我们来看看以上代码是如何工作的。
在main方法中,我们定义了一个JFrame,然后将面板Jpanel添加到窗体中,该面板包括两个按钮。
相应的变量Frame,button1,button2定义在程序的开头部分。
在程序入口main方法中,首先新建Simple1组件,通过构造器建立用户GUI,定义一个面板Jpanle,,增加两个按钮,然后利用将两个按钮加入到一个活动监听器SimpleLister中,最后,两个按钮添加到面板。
JavaSwing实战(⼆)下拉菜单组件JComboBox及其事件监听接下来给”数据源配置“⾯板添加下拉框。
/*** @author: lishuai* @date: 2018/11/26 13:51*/public class WeimingSyncApplets {public static void main(String[] args) {// ⾯板组件JPanel taskPanel = new JPanel();JPanel dbPanel = new JPanel();JTabbedPane tabbedPane = buildJTabbedPane(taskPanel, dbPanel);buildFrame(tabbedPane);}private static JTabbedPane buildJTabbedPane(JPanel taskPanel, JPanel dbPanel) {// 选项卡⾯板JTabbedPane tabbedPane = new JTabbedPane();// 通过BorderFactory来设置边框的特性tabbedPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));tabbedPane.add("执⾏任务", taskPanel);tabbedPane.add("数据源配置", dbPanel);dbPanel.add(buildJLabel("数据库类型", 10, 20, 80, 25));String dbs[] = {"mysql", "oracle", "sqlserver"};dbPanel.add(buildJComboBox("mysql", "mysql", dbs, 0, 100, 20, 165, 25));return tabbedPane;}private static void buildFrame(JComponent component) {// 窗体容器JFrame frame = new JFrame("数据同步⼯具");frame.add(component);// JFrame.EXIT_ON_CLOSE 退出// JFrame.HIDE_ON_CLOSE 最⼩化隐藏frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);// 设置布局frame.getContentPane().setLayout(new BorderLayout());frame.getContentPane().add(BorderLayout.CENTER, component);// 设置窗⼝最⼩尺⼨frame.setMinimumSize(new Dimension(1060, 560));// 调整此窗⼝的⼤⼩,以适合其⼦组件的⾸选⼤⼩和布局frame.pack();// 设置窗⼝相对于指定组件的位置frame.setLocationRelativeTo(null);frame.setVisible(true);// 设置窗⼝尺⼨是否固定不变frame.setResizable(true);}private static JComboBox buildJComboBox(Object selectedItem, String name, String[] elements, int selectedIndex, int x, int y, int width, int height) {DefaultComboBoxModel codeTypeModel = new DefaultComboBoxModel();// elements 下拉框中的选项for (String element : elements) {codeTypeModel.addElement(element);}JComboBox codeTypeBox = new JComboBox(codeTypeModel);codeTypeBox.setName(name);// 默认选中的下拉框选项codeTypeBox.setSelectedItem(selectedItem);// codeTypeBox.setSelectedItem(selectedIndex);codeTypeBox.setBounds(x, y, width, height);// 添加下拉框事件监听器codeTypeBox.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {if (e.getStateChange() == ItemEvent.SELECTED) {// 选择的下拉框选项System.out.println(e.getItem());}}});return codeTypeBox;}private static JLabel buildJLabel(String name, int x, int y, int width, int height) {JLabel label = new JLabel(name);label.setBounds(x, y, width, height);return label;}}效果如下:下拉框选中对象改变时,监听器监听到事件:。
SwingX终于发布了1.6.1版本,与1.6正式版的发布已相隔7个月之久!7.1 Swing入门Swing是一个带有丰富组件的图形用户界面GUI(Graphical User Interfaces)工具包,是Sun 公司在Java 1.2中推出的新的用户界面库。
Swing相对于Java 1.0推出的AWT来说,Swing 不仅仅是AWT所提供的组件的替代品,Swing的功能更强大,使用更方便。
Swing继承AWT,Swing中的类是纯Java编写的,不依赖任何具体的操作系统,可以跨平台使用。
Javax.swing包中有4个最重要的类,它们是JFrame、JApplet、JDialog、JComponent类。
同时Swing提供了40多个组件,Swing的所有组件都是以字母“J”开头,如JButton,JCheckBox 等。
Swing中的JApplet、JFrame、JDialog组件属于顶层容器组件。
在顶层容器下是中间容器,它们是用于容纳其他的组件的组件,如JPanel、JScrollPane等面板组件都是中间容器。
其他组件JButton、JCheckBox等基础组件必须通过中间容器放入顶层容器中。
7.2 Swing的几个重要类7.2.1 JFrame框架JFrame是带标题的顶层窗口。
Swing组件不能直接添加到顶层容器中,它必须通过与Swing顶层容器相关联的内容面板(content pane)来添加组件。
对JFrame添加组件有两种方式:1. 用getContentPane()方法获得JFrame的内容面板,再对其加入组件。
2. 建立一个JPanel之类的中间容器,把组件添加到中间容器中,用setContentPane()方法把该容器置为JFrame的内容面板。
JFrame常用的构造函数为:JFrame() 建立一个没有标题的窗口。
JFrame(String title) 建立一个指定标题的窗口。
Java Swing中处理各组件事件的一般步骤是:1.新建一个组件(如JButton)。
2.将该组件添加到相应的面板(如JPanel)。
3.注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。
4.定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。
以上步骤我们可以用多种方法实现。
但人们通常用二种方法。
第一种方法是只利用一个监听器以及多个if语句来决定是哪个组件产生的事件;第二种方法是使用多个内部类来响应不同组件产生的各种事件,其具体实现又分两种方式,一种是匿名内部类,一种是一般内部类。
为了说明如何使用上述三种方法实现事件的处理方法,我们建立一个简单的应用程序。
该程序界面有两个按钮,当用户点击相应的按钮,就会弹出一个对话框显示相应的内容。
通过这个简单程序,你可以实现自己更多、更复杂的用户界面程序。
首先,我们利用单个监听器来实现该程序。
我们定义一个名为Simple1的类来包括所有代码。
所有的用户行为(如点击按钮)由一个监听器SimpleListenner中的actionPerformed方法来处理。
以下是代码:import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Simple1{private static JFrame frame; // 定义为静态变量以便main使用private static JPanel myPanel; // 该面板用来放置按钮组件private JButton button1; // 这里定义按钮组件private JButton button2; // 以便让ActionListener使用public Simple1() // 构造器, 建立图形界面{// 新建面板myPanel = new JPanel();// 新建按钮button1 = new JButton("按钮1"); // 新建按钮1button2 = new JButton("按钮2");SimpleListener ourListener = new SimpleListener();// 建立一个actionlistener让两个按钮共享button1.addActionListener(ourListener);button2.addActionListener(ourListener);myPanel.add(button1); // 添加按钮到面板myPanel.add(button2);}private class SimpleListener implements ActionListener{public void actionPerformed(ActionEvent e){// 利用getActionCommand获得按钮名称// 也可以利用getSource()来实现// if (e.getSource() ==button1)String buttonName = e.getActionCommand();if (buttonName.equals("按钮1"))JOptionPane.showMessageDialog(frame,"按钮1 被点击");else if (buttonName.equals("按钮2"))JOptionPane.showMessageDialog(frame,"按钮2 被点击");elseJOptionPane.showMessageDialog(frame,"Unknown event" );}}public static void main(String s[]){Simple1 gui = new Simple1(); // 新建Simple1组件frame = new JFrame("Simple1"); // 新建JFrame// 处理关闭事件的通常方法frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e){System.exit(0);} });frame.getContentPane().add(myPanel);frame.pack();frame.setVisible(true);}}让我们来看看以上代码是如何工作的。
2018.4.27Java的Swing常⽤事件Swing常⽤事件1.Java Swing中处理事件的⼀般步骤是:(1)新建⼀个组件(JButton)(2)将该组件添加到⾯板中(JPanel)(3)注册监听器以监听事件源产⽣的事件(如ActionListener来响应客户点击按钮事件)(4)定义处理事件的⽅法(如在ActionLinstener中的actionPerform中定义响应的⽅法)以上步骤我们可以⽤多种⽅法实现,⽤的最多的是第⼆种第⼀种⽅法是只利⽤⼀个监听器以及多个if语句来决定是哪个组件产⽣的事件;第⼆种⽅法是使⽤多个内部类来响应不同组件产⽣的各种事件,其具体实现⼜分两种⽅式,⼀种是匿名内部类,⼀种是⼀般内部类。
package jf;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;public class Tets extends JFrame{JButton btn;JPanel panel;JTextField text;private static final String TIP = "QQ号码/⼿机/邮箱";//初始化窗⼝public void init(){this.setTitle("Test");this.setSize(300,300);this.setLocationRelativeTo(null);this.setResizable(true);}//构造⽅法public Tets() {init();text = new JTextField("qq",20);btn = new JButton("提交");btn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent event) {//点击弹框显⽰JOptionPane.showMessageDialog(null, "提交失败");System.out.println("hhhh");}});this.getContentPane().setLayout(new FlowLayout());this.getContentPane().add(text);this.getContentPane().add(btn);this.setVisible(true);}public static void main(String[] args) {new Tets();}}2.ActionListener(按钮点击事件)在⽂本框⾥⾯显⽰隐式字符package jf;import java.awt.BorderLayout;import java.awt.Color;import ponent;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;public class Hint extends JFrame implements MouseListener{private static final long serialVersionUID = 1L;private static final String TIP = "QQ号码/⼿机/邮箱";public Hint (){setTitle ("test");setLayout (new BorderLayout ());final JTextField tf = new JTextField (TIP);tf.setName ("tf");tf.setForeground (Color.gray);tf.setLocation (0, 0);tf.setSize (100, 30);tf.addMouseListener (this);JPanel panel = new JPanel ();panel.setName ("panel");panel.addMouseListener (this);panel.setLayout (null);panel.add (tf);panel.setFocusable (true);add (panel);setSize (300, 300);setLocationRelativeTo (null);setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);setVisible (true);}public static void main ( String[] args ){new Hint ();}public void mouseClicked ( MouseEvent e ){Component component = e.getComponent ();String name = component.getName ();if (e.getButton () == MouseEvent.BUTTON1){if ("tf".equals (name)){JTextField tf = (JTextField) component;if (TIP.equals (tf.getText ())){tf.setText ("");}}else if ("panel".equals (name)){JTextField tf = (JTextField) ( (JPanel) component ).getComponents ()[0]; if ("".equals (tf.getText ())){tf.setText (TIP);}}}}public void mousePressed ( MouseEvent e ){}public void mouseReleased ( MouseEvent e ){}public void mouseEntered ( MouseEvent e ){}public void mouseExited ( MouseEvent e ){}}密码JTextField textField = new JTextField("密码");textField.addFocusListener(new FocusAdapter() { @Overridepublic void focusLost(FocusEvent e) {if (textField.getText().isEmpty()){textField.setText("密码");}}});。
在Java1.0中,已经有一个用于GUI编程的类库AWT(Abstract Window Toolkit),称之为抽象窗口工具箱。
遗憾的是,AWT中的组件(例如按钮,类名为Button)在实现中使用了本地代码(Native Code),这些组件的创建和行为是由应用程序所在平台上的本地GUI工具来处理的。
因此,AWT组件要在不同的平台上提供给用户一致的行为就受到了很大的限制。
同时,AWT组件中还存在很多bug,这就使得使用AWT来开发跨平台的GUI应用程序困难重重。
1996年,SUN公司和Netsacpe公司在一个称为Swing的项目中合作完善了Netsacpe公司原来开发的一套GUI库,也就是现在所谓的Swing组件。
Swing组件和原来的AWT组件完全不同,最大的区别就是Swing组件的实现中没有使用本地代码,这样对底层平台的依赖型就大为降低,并且可以给不同平台的用户一致的感觉。
此外,和原来的AWT相比,Swing 中提供了内容更多、使用更为方便的组件。
在阅读一些书籍时,常会遇到名词JFC(Java Foundation Class)。
JFC的概念是在1997年的JavaOne开发者大会上首次提出的,是指用于构建GUI的一组API。
实际上,Swing只是JFC的一部分,其它的还有二维图形(Java 2D)API以及拖放(Drag and Drop)API等等。
Swing并不是完全取代了AWT,Swing只是使用更好的GUI组件(如JButton)代替AWT 中相应的GUI组件(如Button),并且增加了一些AWT中原来所没有的GUI组件。
并且,Swing 仍使用AWT 1.1的事件处理模型。
虽然现在AWT组件仍得到支持,但是建议在你的应用程序中尽量使用Swing组件和1.1的事件模型。
1.标签(JLabel)标签(JLabel)通常是用来标识另外一个组件的含义。
以在标签上显示文字、图象或是文字图象的组合。