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)通常是用来标识另外一个组件的含义。
以在标签上显示文字、图象或是文字图象的组合。
第1篇一、Java Swing基本概念1. 什么是Java Swing?答:Java Swing是一种用于创建图形用户界面的库,它是Java语言的一个扩展,允许开发者创建具有丰富视觉效果的桌面应用程序。
2. Swing的组件有哪些?答:Swing组件包括基本组件(如按钮、标签、文本框等)、容器组件(如面板、窗口、滚动条等)、特殊组件(如树、表格等)。
3. Swing与AWT的区别是什么?答:Swing是基于Java的,而AWT是基于本地平台的。
Swing组件在不同平台上表现一致,而AWT组件在不同平台上可能有所不同。
Swing运行速度较慢,但提供了更多功能和更好的用户体验。
二、Swing基本组件1. 如何创建一个按钮,并设置其文本和字体?答:使用JButton类创建按钮,并设置其文本和字体。
```javaJButton button = new JButton("按钮");button.setFont(new Font("宋体", Font.PLAIN, 12));```2. 如何获取并设置文本框中的文本?答:使用JTextField类创建文本框,并通过getText()和setText()方法获取和设置文本。
```javaJTextField textField = new JTextField();String text = textField.getText(); // 获取文本textField.setText("新文本"); // 设置文本```3. 如何使用单选按钮(JRadioButton)实现多选?答:使用JRadioButton类创建单选按钮,并使用ButtonGroup类将它们分组。
```javaJRadioButton radioButton1 = new JRadioButton("选项1");JRadioButton radioButton2 = new JRadioButton("选项2");ButtonGroup buttonGroup = new ButtonGroup();buttonGroup.add(radioButton1);buttonGroup.add(radioButton2);```4. 如何使用复选框(JCheckBox)实现多选?答:使用JCheckBox类创建复选框,它们之间互不影响。
java语言中awt和swing组件的基本用法Java语言中AWT和Swing组件是用于创建图形用户界面(GUI)的工具。
AWT(Abstract Window Toolkit)是Java最早提供的GUI工具包,而Swing是在AWT基础上进行了扩展和改进的高级GUI工具包。
本文将介绍AWT和Swing组件的基本用法。
一、AWT组件的基本用法AWT组件是Java中最基本的GUI组件,它们在不同的平台上都能够保持一致的外观和行为。
下面是AWT常用组件的基本用法:1. Frame(窗口):使用Frame类可以创建一个基本的窗口。
可以调用setTitle()方法设置窗口标题,setSize()方法设置窗口大小,setVisible()方法显示窗口。
例如:```javaFrame frame = new Frame("My Window");frame.setSize(400, 300);frame.setVisible(true);```2. Panel(面板):Panel是一个容器,用于存放其他组件。
可以使用add()方法将其他组件添加到Panel中。
例如:```javaPanel panel = new Panel();Button button = new Button("Click Me");panel.add(button);```3. Button(按钮):Button用于触发特定的动作。
可以使用addActionListener()方法为按钮添加动作监听器。
例如:```javaButton button = new Button("Click Me");button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("Button Clicked");}});```4. Label(标签):Label用于显示文本信息。
Swing 常用事件和监听器接口AncestorEvent AncestorListener ancestorAdded(AncestorEvent e)ancestorMoved(AncestorEvent e)ancestorRemoved(AncestorEvent e) CaretEvent 通知感兴趣的参与者事件源中的文本插入符已经发生更改CaretListener caretUpdate(CareEvente)ChangeEvent 通知感兴趣的参与者事件源中的状态已经发生更改ChangeListener stateChanged(ChangeEvent e)HyperlinkEvent 通知感兴趣的参与者发生了与超文本链接有关的事情HyperlinkListener hyperlinkUpdate(HyperlinkEvent e)InternalFrameEvent 以事件源的形式添加对JInternalFrame对象的支持的A WTEvent InternalFrameListener internalFrameActivated(InternalFrameEvent e)internalFrameClosed(InternalFrameEvent e)internalFrameClosing(InternalFrameEvent e)internalFrameDeactived(InternalFrameEvent e)internalFrameDeiconified(InternalFrameEvent e)internalFrameIconified(InternalFrameEvent e)internalFrameOpened(InternalFrameEvent e)ListDataEvent 定义一个列表更改的事件ListDataListener contentsChanged(ListDataEvent e)intervalAdded(ListDataEvent e)intervalRemoved(ListDataEvent e)ListSelectEvent 表明当前选择项更改的事件ListSelectListener valueChanged(ListSelectEvent e)MenuDrageMouseEv ent 通知感兴趣的参与者菜单元素在拖动条件下已经接受转发给它的MouseEventMenuDrageMouseListenermenuDragMouseDragged(MenuDrageMouseEvent e)menuDragMouseEntered(MenuDrageMouseEvente)menuDragMouseExited(MenuDrageMouseEvente)menuDragMouseReleased(MenuDrageMouseEvent e)MenuEvent 通知感兴趣的参与者作为事件源的菜单已经被发送、选定或取消MenuListener menuCanceled(MenuEvent e)menuDeselected(MenuEvent e)menuSelected(MenuEvent e)MenuKeyEvent 通知感兴趣的参与者菜单元素已经在菜单树中接收给它的KeyEvent MenuKeyListener menuKeyPressed(MenuKeyEvent e)menuKeyReleased(MenuKeyEvent e)menuKeyTyped(MenuKeyEvent e)PopupMenuEvent 只包含事件源。